2017-01-16 49 views
0

我有一个公开通过Spring MVC一个REST API一个春天启动应用程序。春季启动tomcat的嵌入不同的行为为独立

当我运行我的应用程序在本地使用的是嵌入式的Tomcat我可以在结尾加上斜杠访问资源 - 例如POST /资源/

然而,当我在战争部署到一个独立的Tomcat实例,我得到404,如果我包括在URL尾随斜线,但没有最后的斜线成功 - 比如POST /资源。

嵌入式tomcat可以使用或不使用结尾斜杠。

我请求映射

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

我已经试过各种配置选项,包括

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

我能看到的唯一区别是嵌入式Tomcat是V8和独立是V7。这两种运行完全相同的源代码,但表现不同。

任何人都可以建议如何解决这个问题?

感谢

+0

为什么不尝试独立的Tomcat 8,看看它是如何工作:

我从web.xml中删除welcome文件,并更新了我的请求映射到解决这个问题? –

+0

@AndyWilkinson好主意......幸好我已经想通了,不会有设置一个新的环境,只是为了调试这个! – FMC

回答

1

我能解决这个问题。对于任何其他人找到这篇文章...

由于某种原因,Tomcat 7试图将请求与尾部斜杠映射到一个欢迎文件(index.jsp)。它还如果请求要包含一个斜线,除非你专门设置的请求映射为“/”尽管setUseTrailingSlashMatch比赛真不识别端点。

此行为在我的嵌入式tomcat(v8)中未被镜像。

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