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

8

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

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

我将参数作为映射传递给RestTemplate的exchange方法:

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

由于params映射中没有param2,最终URL是example.com/param1=somevalue&param2=

我想从请求中删除param2,也就是说,最终URL应该只包含param1,URL应该看起来像example.com/param1=somevalue

3个回答

4
你可以使用UriComponentsBuilder并提供所需的参数(非空)。
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("example.com");
builder.replaceQueryParam("param1", param1value);
...
restTemplate.exchange(builder.build().encode().toUri(),
                    httpMethod,
                    requestEntity,
                    String.class)

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

0

您可以使用UriComponentsBuilder.replaceQueryParam()方法

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("example.com")
              .replaceQueryParam("param1", null)
              .replaceQueryParam("param2", "Hello");

这将输出 example.com?param2=Hello 并忽略 param1 的值


https://github.com/spring-projects/spring-framework/issues/25625#issuecomment-709084603 - lilalinux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接