我有一个Spring Boot服务器,其中包含控制器和一个端点:
@GetMapping(path = "/readProperty", produces = "application/json")
public ResponseEntity<ReferenceDataRestResponse> getReferenceDatav4
(WebRequest request) {
Map<String, String[]> parametersMap = new HashMap<>(request.getParameterMap());
....
}
另外一个使用restTemplate.getForEntity发送请求的Spring Boot应用程序
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的信息如下:
参考数据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. 使用restTemplate.getForEntity(...)进行Java调用
当Java调用此url时:
ResponseEntity<String> responseEntity = this.refDataRestTemplate.getForEntity(url, String.class, new Object[0]);
我的终结点(endpoint)接收到的service_name参数是
Some%20Value
3. 问题
我该如何使用Spring Boot准备请求以在控制器(controller)中接收解码后(decoded)的参数?