我想使用spring RestTemplate进行REST调用,URL包含一些可选的查询参数。 URL看起来像
url = example.com/param1={param1}¶m2={param2}
我使用交换方法将params作为map传递给restTemplate
restTemplate.exchange(url,method,payLoad,String.class,params)
最终网址为 example.com/param1=somevalue¶m2 = ,因为参数地图中不存在param2。
我想从请求中删除param2,也就是说,最终的网址应该只包含param1,而网址应该类似 example.com/param1=somevalue
答案 0 :(得分:2)
您可以使用UriComponentsBuilder并提供所需的参数(非空值)。
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("example.com");
builder.replaceQueryParam("param1", param1value);
...
restTemplate.exchange(builder.build().encode().toUri(),
httpMethod,
requestEntity,
String.class)
答案 1 :(得分:0)
您可以使用方法UriComponentsBuilder.replaceQueryParam()
Twitter Publish
这将输出 example.com?param2=Hello ,并忽略param1的值
答案 2 :(得分:0)
您可以创建一个将调用委托给 UriComponentsBuilder 的类。使用如下方法:
public UriBuilder queryParam(String name, String value) {
if (!StringUtils.isEmpty(value)){
internalBuilder.queryParam(name, value);
}else {
//or dont do anything
internalBuilder.replaceQueryParam(name);
}
return this;
}