Question

J'ai un serveur et un client. J'utilise Spring pour cartographier les demandes HTTP sur le serveur et RestTemplate pour faire des demandes au serveur.

Le code du serveur ressemble à ceci:

@RequestMapping (value="/someEndPoint", method = RequestMethod.POST)
@ResponseBody
public String configureSettings(
@RequestParam(required=false) Integer param1,
@RequestParam(required=false) Long param2,
@RequestBody String body)
{

if(param1 != null)
// do something

if(body not empty or null)
//do something

} 

Côté client:

String postUrl = "http://myhost:8080/someEndPoint?param1=val1"
restTemplate.postForLocation(postUrl, null);

Cela fonctionne en ce que l'action correcte est déclenchée du côté serveur à partir de param1 Cependant, le corps de la demande contient également:
param1 = val1
Le corps de demande lorsqu'il est défini, il sera JSON, donc tout ce que je veux, c'est pouvoir définir d'autres paramètres sans régler le corps. Je sais que j'utilise le repos complate de manière incorrecte, donc toute aide serait grandement appréciée.

Était-ce utile?

La solution

Vous faites un HTTP POST, mais vous ne fournissez pas d'objet à mettre POSTéd. Printemps RestTemplate essaie de comprendre ce que vous voulez POST, il semble donc que la chaîne de requête de l'URL a quelque chose, il essaie donc de l'utiliser.

N'ajoutez pas de chaîne de requête à un POST, fournissez simplement l'objet que vous souhaitez POST.

String postUrl = "http://myhost:8080/someEndPoint"
restTemplate.postForLocation(postUrl, new ParamModel("val1"));

Le livre Spring in Action (3rd edition) couvertures RestTemplate (et reposer en général) Assez bien. Je recommanderais de y jeter un œil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top