基本上,使用Spring MVC,我正在尝试创建一个路由器控制器,它将接收尚未由另一个控制器处理的任何URL并将其路由到其各自的资源,或者如果没有资源可以转发搜索请求找到。
使用@RequestMapping(value="/{qry}", method = RequestMethod.GET)
成功获取了我的其他控制器尚未抓取的请求(这似乎通过首先检查最具体的映射来工作)然后我可以做任何我需要的转发。但是,只要我在请求中放入“/”,映射就会中断并返回404。
所以换句话说,"/some-long-path-or-something"
正确地映射到这个全能控制器,但是"/some/other/path"
(它没有映射到任何其他控制器)并没有被我的全部捕获。
如何实施?我已经阅读了一些关于拦截器和默认处理程序的内容,但没有找到解决方案的运气。
感谢您的任何建议!
答案 0 :(得分:5)
开箱即用,Spring自动注册一个DefaultAnnotationHandlerMapping
bean,它使用注释匹配对控制器的请求。在大多数情况下,它的默认行为都很好。
如果在上下文中声明自己的DefaultAnnotationHandlerMapping
,那么它将覆盖默认值,并允许您设置其defaultHandler
属性,当没有任何显式处理程序匹配时将使用该属性。只需将“catch-all”控制器注入该属性,然后将Bob's Your Uncle。
答案 1 :(得分:3)
为什么不抓住404并相应处理?如果我没有弄错的话,我认为这就是你想要完成的事情。
您可以将其放在web.xml中以处理404:
<error-page>
<error-code>404</error-code>
<location>/yourHandlerPage</location>
</error-page>
我在这里错过了什么吗?