获取请求仅适用于尾部斜杠(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 /