Shiva Shiva - 3 months ago 37
Java Question

RestTemplate: How to send URL parameters and query parameters together

I am trying to pass path param and query params in a URL but I am getting a wiered error. below is the 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);


and my url is becoming
http://test.com/Services/rest/%7Bid%7D/Identifier?name=myName


what should I do to make it work. I am expecting
http://test.com/Services/rest/{id}/Identifier?name=myName
so that params will add id to the url

please suggest. thanks in Advance

Answer

I would use buildAndExpand from UriComponentsBuilder to pass all types of URI parameters.

For example:

String url = "http://test.com/Services/rest/{id}/Identifier";

Map<String, String> params = new HashMap<String, String>();
    params.put("id", "1234");
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
    .queryParam("name", "myName");

// System.out.println(builder.buildAndExpand(params).toUri());

restTemplate.exchange(builder.buildAndExpand(params).toUri() , HttpMethod.PUT, requestEntity ,
class_p);