Spring MVC默认映射处理程序


问题内容

基本上,使用Spring
MVC,我试图创建一个路由器控制器,该控制器将获取尚未由另一个控制器处理的任何URL,并将其路由到其各自的资源,或者如果找不到资源,则转发搜索请求。使用@RequestMapping(value="/{qry}", method = RequestMethod.GET)成功捕获了其他控制器尚未捕获的请求(这似乎可以通过首先检查最具体的映射来解决),然后我可以执行所需的任何转发。但是,一旦我在请求中添加“
/”,映射就会中断并返回404。

因此,换句话说,"/some-long-path-or- something"正确地映射到这个包罗万象的控制器,但是"/some/other/path"(它没有映射到任何其他控制器)却没有被我的包罗万象。

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

感谢您的任何建议!


问题答案:

开箱即用,Spring自动注册一个DefaultAnnotationHandlerMappingbean,该bean使用注释将请求与控制器匹配。在大多数情况下,它的默认行为都很好。

如果您DefaultAnnotationHandlerMapping在上下文中声明自己的defaultHandler属性,则它将覆盖默认属性,并允许您设置其属性,当所有显式处理程序都不匹配时将使用该属性。只需将“包罗万象”控制器注入该属性,然后注入Bob的Your
Uncle。