【问题标题】:Spring boot server receiving param with %20 instead of spaceSpring Boot 服务器接收带有 %20 而不是空格的参数
【发布时间】:2021-08-31 10:18:33
【问题描述】:

我有带有控制器和一个端点的 Spring Boot 服务器:

@GetMapping(path = "/readProperty", produces = "application/json")
public ResponseEntity<ReferenceDataRestResponse> getReferenceDatav4
        (WebRequest request) {
    Map<String, String[]> parametersMap = new HashMap<>(request.getParameterMap());

    ....

}

另一个 Spring Boot 应用程序使用 restTemplate.getForEntity 发送请求

String url = UriComponentsBuilder
   .fromHttpUrl(this.referenceDataBaseUrl)
   .path(this.referenceDataReadProperty)
   .queryParams(new LinkedMultiValueMap(multiValueParams))
   .toUriString();
log.info("Reference data URL {}", url);
ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class);

带有 url 的信息日志打印:

Reference data URL http://some-name:8080/readProperty?channel=E&amp;service_name=Some%20Value

问题是当我使用 curl 命令和 restTemplate.getForEntity 调用此端点时,我在控制器中收到不同的 service_name 参数值

1.卷曲

当我从日志中复制这个 url 并使用 curl 命令调用它时:

curl 'http://some-name:8080/readProperty?channel=E&amp;service_name=Some%20Value'

我的端点正在接收 service_name 参数

一些价值

2。使用 restTemplate.getForEntity(...) 进行 Java 调用

当java调用这个url时:

ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class, new Object[0]);

我的端点正在接收 service_name 参数

一些%20值

3.问题

我应该如何使用 Spring Boot 准备请求以接收控制器解码参数?

【问题讨论】:

    标签: java spring spring-boot resttemplate


    【解决方案1】:

    发现一个问题。

    URL 被 java 服务编码两次。一次是 toUriString(),第二次是 restTemplate.getForEntity

    当我将发送请求的方法更改为:

    String url = UriComponentsBuilder
       .fromHttpUrl(this.referenceDataBaseUrl)
       .path(this.referenceDataReadProperty)
       .queryParams(new LinkedMultiValueMap(multiValueParams))
       .toString();
    log.info("Reference data URL {}", url);
    ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class);
    

    然后它起作用了,参数值有空格而不是 %20

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多