2017-03-02 172 views
0

当调用get http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=我的春节,启动应用程序RestController有这样的请求处理程序:为什么使用springboot其余控制器将加号(+)解码为url路径中的space()?

@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

你在浏览器中输入网址吗?还是你用js调用你的服务?还是你从一个Java客户端调用你的服务? – reos

回答

1

我确定后,我已经能够解决我的IDE自动添加spring-boot-starter-undertow到POM文件。我没有从spring-boot-starter-web中排除spring-boot-starter-tomcat,所以我不确定在封面下发生了什么,但是删除spring-boot-starter-undertow依赖项解决了这个问题。

相关问题