【问题标题】:Spring RestTemplate GET request remove empty query paramsSpring RestTemplate GET 请求删除空查询参数
【发布时间】:2017-09-14 05:25:42
【问题描述】:

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

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

我使用交换方法将参数作为映射传递给restTemplate

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

最终到达网址是 example.com/param1=somevalue&param2=,因为 params 映射中不存在 param2。

我想从请求中删除 param2,即最终 URL 应仅包含 param1,并且 URL 应类似于 example.com/param1=somevalue

【问题讨论】:

    标签: java spring


    【解决方案1】:

    您可以创建一个将调用委托给 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;
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您可以使用 UriComponentsBuilder 并提供所需的参数(不是空值)。

        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("example.com");
        builder.replaceQueryParam("param1", param1value);
        ...
        restTemplate.exchange(builder.build().encode().toUri(),
                            httpMethod,
                            requestEntity,
                            String.class)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-07
          • 1970-01-01
          • 2018-08-29
          • 2018-11-19
          • 2019-11-29
          • 1970-01-01
          • 2014-09-06
          相关资源
          最近更新 更多