Spring RestTemplate GET请求删除空查询参数

时间:2017-04-18 11:34:57

标签: java spring

我想使用spring RestTemplate进行REST调用,URL包含一些可选的查询参数。 URL看起来像

url = example.com/param1={param1}&param2={param2}

我使用交换方法将params作为map传递给restTemplate

restTemplate.exchange(url,method,payLoad,String.class,params)

最终网址为 example.com/param1=somevalue&param2 = ,因为参数地图中不存在param2。

我想从请求中删除param2,也就是说,最终的网址应该只包含param1,而网址应该类似 example.com/param1=somevalue

3 个答案:

答案 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;
}