获取请求仅适用于尾部斜杠(Spring REST注释)

我有一个Spring REST控制器:

@RestController @RequestMapping(value = "/myresource") public class MyResourceController { ... } 

使用GET请求方法:

 @RequestMapping(method = GET, value = "/{value1}/{value2}/{value3}", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8") public ResponseEntity getMyResource( @ApiParam(value = "...",...) @PathVariable("value1") String value1, @ApiParam(value = "...",...) @PathVariable("value2") String value2, @ApiParam(value = "...",...) @PathVariable("value3") String value3) { //... } 

我希望这个方法可以调用:

 http://myserver:8080/myresource/value1/value2/value3 

但只能使用尾部斜杠来访问它:

 http://myserver:8080/myresource/value1/value2/value3/ 

为什么会这样或者是什么造成这种情况?

Swagger假设没有斜杠,我现在无法发送带有招摇的请求。

我该怎么做才能使第一个URL工作而不是第二个?

非常感谢你的意见和答案。


编辑2:

我发现没有斜线,value3的信息是不完整的。 value3必须是一个电子邮件地址,但最终点的所有内容都将被截断。 因此,而不是“myemail@something.de”我得到“myemail @ something”。

这解释了为什么我无法获得正确的结果(没有内容和HTTP状态代码404)。 但我仍然不明白为什么会这样。 除此之外,如果我在顶级域名中有三个字母的电子邮件地址(如.com),请求永远不会到达GET方法“getMyResource”….


编辑1:我的web.xml看起来像这样:

   (my) Services  SetCharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter  encoding UTF-8   forceEncoding true    SetCharacterEncodingFilter /*    my.ServletContextUtils    org.springframework.web.context.request.RequestContextListener   spring-mvc org.springframework.web.servlet.DispatcherServlet  contextConfigLocation  WEB-INF/config/spring-mvc-servlet.xml   1   spring-mvc /*   

我的spring-mvc-servlet.xml看起来像这样:

            

webapp.properties不包含太多:

 swagger.include-pattern=/(?!api-docs|version).* 

我有很多使用Spring Rest注释的应用程序,我的API可以使用或不使用尾部斜杠。

它可能是您的Spring MVC配置或您正在使用的http服务器的问题。

你可以用Spring MVC配置发布一些代码片段吗? 很高兴知道您正在使用哪个Spring版本以及如何为webapp提供服务。

编辑1:

正如我在您的第二次编辑中看到的那样,您遇到了电子邮件参数问题吗?

您可以尝试使用类似的东西,让我知道它是否解决了这个问题?

@RequestMapping(method = GET, value = "/{value1}/{value2}/{value3:.+}"...

问题似乎与url中的点有关。

参考: 带有点(。)的Spring MVC @PathVariable被截断

我在这里找到了答案:

Spring MVC @PathVariable被截断了

这似乎只发生在最后一个参数,解决方案是使用正则表达式作为最后一个值:

 @RequestMapping(method = GET, value = "/{value1}/{value2}/{value3:.+}" 

这对我有用。

在您的web.xml文件中

  spring-mvc /* 

如果你没有尝试*只/ /(如图所示),你得到了什么结果?

  spring-mvc /