【问题标题】:Spring boot embedded tomcat behaves differently to standaloneSpring Boot 嵌入式 tomcat 的行为与独立的不同
【发布时间】:2017-05-31 13:46:25
【问题描述】:

我有一个通过 Spring MVC 公开 REST API 的 Spring Boot 应用程序。

当我使用嵌入式 tomcat 在本地运行我的应用程序时,我可以使用末尾的斜杠访问资源 - 例如 POST /resource/

但是,当我将战争部署到独立的 tomcat 实例时,如果我在 URL 中包含尾部斜杠,我会得到 404,但如果没有尾部斜杠则成功 - 例如 POST /resource。

嵌入式 tomcat 可以带或不带斜杠。

我的请求映射是

 @RequestMapping(value = "/resource", method = RequestMethod.POST)

我尝试了各种配置选项,包括

@Override
public void configurePathMatch(PathMatchConfigurer matcher) {
    matcher.setUseRegisteredSuffixPatternMatch(true);
    matcher.setUseTrailingSlashMatch(true);
}

我能看到的唯一区别是嵌入式 tomcat 是 v8,而独立版是 v7。两者运行完全相同的源代码,但行为不同。

谁能建议如何解决这个问题?

谢谢

【问题讨论】:

  • 为什么不试试独立的 Tomcat 8 看看它的表现如何?
  • @AndyWilkinson 好主意...谢天谢地,我已经想通了,不必为了调试而设置新环境!

标签: spring spring-mvc tomcat spring-boot


【解决方案1】:

我能够解决问题。对于其他找到此帖子的人...

由于某种原因,Tomcat 7 试图将带有斜杠的请求映射到欢迎文件 (index.jsp)。如果请求包含尾部斜杠,它也不会识别端点,除非您专门为“/”设置请求映射,尽管 setUseTrailingSlashMatch 匹配为 true。

此行为未反映在我的嵌入式 tomcat (v8) 中。

我通过从 web.xml 中删除欢迎文件并将我的请求映射更新为:

解决了这个问题
 @RequestMapping(value = {"/resource","/resource/"}, method = RequestMethod.POST)

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2018-05-13
    • 2014-01-11
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多