Spring 启动服务器接收参数为 %20 而不是 space
Spring boot server receiving param with %20 instead of space
我有 spring 带有控制器和一个端点的引导服务器:
@GetMapping(path = "/readProperty", produces = "application/json")
public ResponseEntity<ReferenceDataRestResponse> getReferenceDatav4
(WebRequest request) {
Map<String, String[]> parametersMap = new HashMap<>(request.getParameterMap());
....
}
另一个 spring 启动应用程序正在发送 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&service_name=Some%20Value
问题是,当我使用 curl 命令和 restTemplate.getForEntity 调用此端点时,我在控制器 service_name 中收到不同的参数值
1. Curl
当我从日志中复制此 url 并使用 curl 命令调用它时,如下所示:
curl 'http://some-name:8080/readProperty?channel=E&service_name=Some%20Value'
我的端点正在接收 service_name 参数作为
Some Value
2。 Java 调用 restTemplate.getForEntity(...)
当 java 调用此 url 时:
ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class, new Object[0]);
我的端点正在接收 service_name 参数作为
Some%20Value
3。问题
我应该如何使用 spring 引导准备请求以接收控制器解码参数?
发现问题。
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
我有 spring 带有控制器和一个端点的引导服务器:
@GetMapping(path = "/readProperty", produces = "application/json")
public ResponseEntity<ReferenceDataRestResponse> getReferenceDatav4
(WebRequest request) {
Map<String, String[]> parametersMap = new HashMap<>(request.getParameterMap());
....
}
另一个 spring 启动应用程序正在发送 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&service_name=Some%20Value
问题是,当我使用 curl 命令和 restTemplate.getForEntity 调用此端点时,我在控制器 service_name 中收到不同的参数值
1. Curl
当我从日志中复制此 url 并使用 curl 命令调用它时,如下所示:
curl 'http://some-name:8080/readProperty?channel=E&service_name=Some%20Value'
我的端点正在接收 service_name 参数作为
Some Value
2。 Java 调用 restTemplate.getForEntity(...)
当 java 调用此 url 时:
ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class, new Object[0]);
我的端点正在接收 service_name 参数作为
Some%20Value
3。问题
我应该如何使用 spring 引导准备请求以接收控制器解码参数?
发现问题。
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