为什么使用Springboot REST控制器在URL路径中的Space()中加分( )



呼叫时, http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=我的春季启动应用程序restController带有请求处理程序:

  @RequestMapping("/things/{thingId}")
  public ResponseEntity<Thing> getThing(
      @PathVariable String thingId) {
    System.out.println("thingId=" + thingId);
  ...

导致以下打印ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=,而不是我期望的ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=

您可以看到,加号正在变成一个空间。这不应该在路径部分中发生,而只会发生查询部分。这就是为什么我用来构建URL的弹簧UriComponentsBuilder.build().encode()不会将加号变成%2B的原因。

我需要调整应用程序以使编码的斜杠(/)工作。有关详细信息,如果URL中的ID包含%2F,请参见REST端点无法到达。

我正在使用Springboot 1.4.4。我尝试从Spring Resttemplate,Postman和Chrome调用该服务。在所有情况下,相同的结果,加号都变成了空间

我在识别我的IDE已自动添加了Spring-boot-starter-undertow之后能够解决。我没有从Spring-Boot-Starter-Web中排除Spring-boot-Starter-Tomcat,因此我不确定封面下发生了什么,而是删除了Spring-Boot-Starter-Starter-starter-undtow依赖性。

相关内容

  • 没有找到相关文章

最新更新