spring mvc默认映射处理程序

时间:2011-02-15 19:32:53

标签: java spring-mvc

基本上,使用Spring MVC,我正在尝试创建一个路由器控制器,它将接收尚未由另一个控制器处理的任何URL并将其路由到其各自的资源,或者如果没有资源可以转发搜索请求找到。 使用@RequestMapping(value="/{qry}", method = RequestMethod.GET)成功获取了我的其他控制器尚未抓取的请求(这似乎通过首先检查最具体的映射来工作)然后我可以做任何我需要的转发。但是,只要我在请求中放入“/”,映射就会中断并返回404。

所以换句话说,"/some-long-path-or-something"正确地映射到这个全能控制器,但是"/some/other/path"(它没有映射到任何其他控制器)并没有被我的全部捕获。

如何实施?我已经阅读了一些关于拦截器和默认处理程序的内容,但没有找到解决方案的运气。

感谢您的任何建议!

2 个答案:

答案 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>  

我在这里错过了什么吗?