web-dev-qa-db-fra.com

Comment passer une paire de valeurs clés à l'aide de resttemplate dans java

Je dois transmettre la paire valeur/clé dans le corps de la demande de publication. Mais lorsque j'exécute mon code, j'obtiens l'erreur comme "Impossible d'écrire la demande: aucun HttpMessageConverter approprié trouvé pour le type de demande [org.springframework.util.LinkedMultiValueMap] et le type de contenu [text/plain]"

Mon code est le suivant:

MultiValueMap<String, String> bodyMap = new LinkedMultiValueMap<String, String>();
bodyMap.add(GiftangoRewardProviderConstants.GIFTANGO_SOLUTION_ID, giftango_solution_id);
bodyMap.add(GiftangoRewardProviderConstants.SECURITY_TOKEN, security_token);
bodyMap.add(GiftangoRewardProviderConstants.REQUEST_TYPE, request_type);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(bodyMap, headers);

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> model = restTemplate.exchange(giftango_us_url, HttpMethod.POST, request, String.class);
String response = model.getBody();
27

FormHttpMessageConverter est utilisé pour convertir les objets MultiValueMap pour envoyer des requêtes HTTP. Les types de supports par défaut pour ce convertisseur sont application/x-www-form-urlencoded et multipart/form-data. En spécifiant le type de contenu comme text/plain, vous dites à RestTemplate d'utiliser le StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

Mais ce convertisseur ne prend pas en charge la conversion d'un MultiValueMap, c'est pourquoi vous obtenez l'erreur. Vous avez plusieurs options. Vous pouvez changer le type de contenu en application/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

Ou vous ne pouvez PAS définir le type de contenu et laisser RestTemplate le gérer pour vous. Il le déterminera en fonction de l'objet que vous tentez de convertir. Essayez d'utiliser la demande suivante comme alternative.

ResponseEntity<String> model = restTemplate.postForEntity(giftango_us_url, bodyMap, String.class);
29
Roy Clarkson