Printemps RestRemplate postforobject avec les paramètres de la requête ayant valeur entière
J'ai une méthode au Printemps reste du service.
@RequestMapping(value = "test/process", method = RequestMethod.POST)
public @ResponseBody MyResponse processRequest(String RequestId, int count)
Je suis à l'aide de Printemps RestTemplate pour appeler ce service de ce genre.
RestTemplate restTemplate = this.getRestTemplate();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("RequestId", RequestId);
map.add("count", count);
restTemplate.postForObject(url, map,MyResponse.class);
Lorsque j'essaie d'appeler le client méthode que j'ai accès à l'exception de pas adapté HttpMessageConverter trouvé pour le type de demande de [java.lang.Integer]
org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Integer]
at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:310)
at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:270)
at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:260)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:200)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:1)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:596)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:444)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:287)
Je sais qu'un des moyens est de passer tous les paramètres de la Chaîne. Mais je pourrais avoir besoin pour passer des types de données complexes comme des paramètres plus tard.
Qu'est-ce que les moyens d'y parvenir.
J'ai googlé et certaines options semblent être l'écriture de mes propres convertisseurs. Comment dois-je commencer sur la résolution de ce problème.
- Dans la ligne suivante: carte.add("Iddemande", Iddemande); est Iddemande un objet plus complexe qu'une chaîne de caractères? Peut-on voir l'URL? Merci!
- Iddemande est simplement une chaîne de caractères, mais je pourrais avoir besoin pour un post de types de données personnalisés ou d'un objet date, dans d'autres méthodes
Vous devez vous connecter pour publier un commentaire.
La cause de cette erreur est que, en spécifiant un
Integer
dans leLinkedMultiValueMap
, leRestTemplate
qui signifie que votre demande est une demande multiparties. Il n'y a pas deHttpMessageConverter
inscrits par défaut qui peut gérer l'écriture des valeurs de typeInteger
à un corps de la requête.Comme vous l'avez dit, vous pouvez gérer cette situation en changeant les
count
être unString
. Après tout, il n'y a pas deInteger
type dans les paramètres de la requête HTTP. Cependant, vous étiez inquietPenser à quelque chose comme ceci
avec
Les suivantes fonctionnent très bien,
Rappelez-vous que les paramètres de la requête sont utilisés pour remplir les champs d'attributs de modèle par leurs noms.
Une bien meilleure solution serait l'utilisation d'un standard de sérialisation comme JSON ou XML.
@RequestBody
annotation sur gestionnaire des paramètres de la méthode.