如何更改Spring MVC中映射URL的顺序?

时间:2010-08-10 11:35:45

标签: spring-mvc

我正在运行Spring MVC 3.x,我有一个带 RequestMapping 注释的控制器( DefaultAnnotationHandlerMapping ),我有一个 ServletForwardingController 通过 SimpleUrlHandlerMapping 进行一些额外的映射。当我启动我的应用程序时,我看到以下内容:

...
13:24:17,747 INFO  [DefaultAnnotationHandlerMapping] Mapped URL path [/{query}] onto handler [com.foo.controllers.BarController@1b20a36]
13:24:17,997 INFO  [SimpleUrlHandlerMapping] Root mapping to handler [org.springframework.web.servlet.mvc.ParameterizableViewController@598535]
13:24:18,044 INFO  [SimpleUrlHandlerMapping] Mapped URL path [/spring*.ftl] onto handler [org.springframework.web.servlet.mvc.ServletForwardingController@56eb62]
13:24:18,044 INFO  [SimpleUrlHandlerMapping] Mapped URL path [/shared-resources/**] onto handler [org.springframework.web.servlet.mvc.ServletForwardingController@56eb62]
...

我的BarController当然会捕获所有请求(例如/spring_en_US.ftl),但我希望最后一次尝试。换句话说,我希望 SimpleUrlHandlerMapping 优先于我的应用程序中的 DefaultAnnotationHandlerMappings

2 个答案:

答案 0 :(得分:2)

我找到的最佳解决方案是使用显式 DefaultAnnotationHandlerMapping AnnotationMethodHandlerAdapter bean配置替换 mvc:annotation-config 。然后,我可以在 SimpleUrlHandlerMapping (order = 0)和 DefaultAnnotationHandlerMapping (order = 1)上设置 order 属性。这根据我的需要设置了处理程序的优先级。

我尝试重新排序 SimpleUrlHandlerMapping 下面的 mvc:annotation-config ,但它并未根据需要更改处理程序优先级。

答案 1 :(得分:0)

DispatcherServlet应该按照bean文件中声明的顺序查询各种HandlerMapping bean。第一个说“是的,我有一个映射”获得了奖项。

如果您手动声明SimpleUrlHandlerMappingDefaultAnnotationHandlerMapping,请确保它们的顺序正确。

如果您没有自己声明,那么Spring将使用默认值,即BeanNameUrlHandlerMapping后跟DefaultAnnotationHandlerMapping