使用像这样的请求处理程序调用GET http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=
我的Spring Boot应用程序RestController时:
@RequestMapping("/things/{thingId}")
public ResponseEntity<Thing> getThing(
@PathVariable String thingId) {
System.out.println("thingId=" + thingId);
...
导致以下内容被打印ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=
而不是我预期的ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=
。
正如您所看到的,正在变成一个空间。这不应该发生在路径部分,只有查询部分。这就是为什么我用来构建URL的Spring UriComponentsBuilder.build().encode()
没有将加号转换为%2B
。
我需要调整应用程序以使编码的斜杠(/)起作用。有关详细信息,请参阅REST Endpoint unreachable if ID in URL contains %2F。
我正在使用SpringBoot 1.4.4.RELEASE,它使用Tomcat嵌入8.5.11 我试过从Spring RestTemplate,Postman和Chrome调用该服务。在所有情况下结果相同,加号变为空格
答案 0 :(得分:1)
在确定我的IDE已自动将spring-boot-starter-undertow添加到POM文件后,我能够解决。我没有从spring-boot-starter-web中排除spring-boot-starter-tomcat,所以我不确定幕后发生了什么,但是删除spring-boot-starter-undertow依赖修复了这个问题。