J'essaie de transmettre les paramètres de chemin et de requête dans une URL, mais j'obtiens une erreur étrange. ci-dessous est 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 que cela fonctionne? Je m'attends à http://test.com/Services/rest/{id}/Identifier?name=myName
pour que params ajoute id à l'URL
veuillez suggérer. Merci d'avance
J'utiliserais buildAndExpand
à partir de UriComponentsBuilder
pour transmettre tous les types de paramètres d'URI.
Par exemple:
String url = "http://test.com/solarSystem/planets/{planet}/moons/{moon}";
// URI (URL) parameters
Map<String, String> uriParams = new HashMap<String, String>();
uriParams.put("planets", "Mars");
uriParams.put("moons", "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/planets/Mars/moons/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/planets/Mars/moons/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 requête, puis développe les variables de chemin. Si le paramètre de requête contient une parenthèse, par exemple, {foobar}
, cela provoquera une exception.
La méthode la plus sûre consiste à développer d’abord les variables de chemin, puis à ajouter les paramètres de la 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);