gpt4 book ai didi

java - Spring 启动服务器接收带有 %20 而不是空间的参数

转载 作者:行者123 更新时间:2023-12-04 12:54:10 24 4
gpt4 key购买 nike

我有带有 Controller 和一个端点的 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 的信息日志打印:

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


问题是,当我使用 curl 命令和 restTemplate.getForEntity 调用此端点时,我在 Controller 中收到不同的 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 boot 接收 Controller 解码参数的请求?

最佳答案

发现一个问题。
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

关于java - Spring 启动服务器接收带有 %20 而不是空间的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68996923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com