RestTemplate: comment envoyer les paramètres URL et query ensemble
j'essaye de passer le chemin param et d'interroger les params dans une URL mais je reçois une erreur étrange. ci-dessous le code
String url = "http://test.com/Services/rest/{id}/Identifier"
Map<String, String> params = new HashMap<String, String>();
params.put("id", "1234");
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
.queryParam("name", "myName");
String uriBuilder = builder.build().encode().toUriString();
restTemplate.exchange(uriBuilder , HttpMethod.PUT, requestEntity,
class_p, params);
et mon url devient http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName
que dois-je faire pour le faire fonctionner. Je suis dans l'attente d' http://test.com/Services/rest/{id}/Identifier?name=myName
pour que params ajoute de l'id à l'url
s'il vous plaît suggérer. merci à l'Avance
2 réponses
je voudrais utiliser buildAndExpand
UriComponentsBuilder
pour passer tous les types de paramètres URI.
Par exemple:
String url = "http://test.com/solarSystem/planet/{planet}/moon/{moon}";
// URI (URL) parameters
Map<String, String> uriParams = new HashMap<String, String>();
uriParams.put("planet", "Mars");
uriParams.put("moon", "Phobos");
// Query parameters
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
// Add query parameter
.queryParam("firstName", "Mark")
.queryParam("lastName", "Watney");
System.out.println(builder.buildAndExpand(uriParams).toUri());
/**
* Console output:
* http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney
*/
restTemplate.exchange(builder.buildAndExpand(uriParams).toUri() , HttpMethod.PUT,
requestEntity, class_p);
/**
* Log entry:
* org.springframework.web.client.RestTemplate Created PUT request for "http://test.com/solarSystem/planet/Mars/moon/Phobos?firstName=Mark&lastName=Watney"
*/
Un problème avec la réponse de Michal Foksa est qu'il ajoute d'abord les paramètres de la requête, puis étend les variables de chemin. Si le paramètre de requête contient la parenthèse, par exemple {foobar}
, ce qui causera une exception.
le moyen sûr est d'étendre les variables de chemin d'abord, puis d'ajouter les paramètres de requête:
String url = "http://test.com/Services/rest/{id}/Identifier";
Map<String, String> params = new HashMap<String, String>();
params.put("id", "1234");
URI uri = UriComponentsBuilder.fromUriString(url)
.buildAndExpand(params)
.toUri();
uri = UriComponentsBuilder
.fromUri(uri)
.queryParam("name", "myName")
.build()
.toUri();
restTemplate.exchange(uri , HttpMethod.PUT, requestEntity, class_p);