我在配置Spring boot 1.2.0.M1以提供静态内容时遇到问题。 只要在我的应用程序中添加 @RestController 组件,就不会显示静态内容,而是会出现 whitelabel 错误页面。我的资源位于 src / main / resources / static 文件夹中。
我按照http://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot上的说明操作,并设法通过将 ResourceHandlerRegistry 优先级设置为-1来显示它们。但我想这不是标准和正确的方法。似乎REST资源的处理程序优先于资源处理程序注册表。是否有可能将rest资源的处理程序配置为仅用于 / api 的子上下文?
更新:
我已经将DispatcherServlet放在调试中,我更好地理解为什么会发生这种情况,但仍然不确定什么是处理它的最佳方法。 我注意到默认情况下,以相应的顺序在Dispatch servlet中注册了以下处理程序:
当我在REST资源上执行POST时2.处理它。 当我在静态资源上执行GET时2.抛出 HttpRequestMethodNotSupportedException ,因为它无法找到资源(在其handleNoMatch方法中)。
如果我使用 ResourceHandlerRegistry#setOrder(Ordered.HIGHEST_PRECEDENCE)更改优先级; 5.在2.之前放置。但是在这种情况下我不能执行用于我的REST资源的POST / user / api,它不匹配作为资源(我已经为资源处理程序配置了/ **模式)。
如果我与node.js / express进行比较,例如您为控制器配置了路由,如果没有与请求匹配,则请求由静态资源或模板的处理程序处理。
你知道如果有可能通过注释使2(即RequestMappingHandlerMapping)不抛出异常但只是在不匹配的情况下将请求传递给链中的下一个处理程序? 我想避免使用特定的上下文(静态资源的静态)。
更新2 :
实际上,这只是我的带注释的REST控制器的错误配置 @RestController 我在注释的value属性中配置了不适用于此的路径,但存储了控制器的名称 我忘了添加 @RequestMapping 因此为任何url路径启用了处理程序RequestMappingHandlerMapping,并且get请求与任何带注释的方法都不匹配,因此它返回了一个错误。