2010-08-10 74 views
1

我运行的Spring MVC 3.x和我有一个控制器,RequestMapping注释(DefaultAnnotationHandlerMapping)和我通过SimpleUrlHandlerMapping建立有一个ServletForwardingController有一些额外的映射。当我启动我的申请,我看到以下内容:如何更改Spring MVC中映射URL的排序?

... 
13:24:17,747 INFO [DefaultAnnotationHandlerMapping] Mapped URL path [/{query}] onto handler [[email protected]] 
13:24:17,997 INFO [SimpleUrlHandlerMapping] Root mapping to handler [or[email protected]598535] 
13:24:18,044 INFO [SimpleUrlHandlerMapping] Mapped URL path [/spring*.ftl] onto handler [[email protected]56eb62] 
13:24:18,044 INFO [SimpleUrlHandlerMapping] Mapped URL path [/shared-resources/**] onto handler [[email protected]56eb62] 
... 

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

+0

或者您可以使用[此项目](https://github.com/bclozel/springmvc-router)进行基于文件的路由配置。 – 2012-10-14 10:44:19

回答

2

我发现最好的解决办法是更换MVC:有明确DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter上 bean的配置注解配置。然后,我可以在SimpleUrlHandlerMapping(order = 0)和DefaultAnnotationHandlerMapping(order = 1)上设置订单属性。这根据我的需要设置了处理程序的优先级。

我试图重新排序MVC:注解配置下面SimpleUrlHandlerMapping建立,但需要它并没有改变处理程序的优先级。

0

DispatcherServlet应该按照它们在beans文件中声明的顺序查阅各种HandlerMapping bean。第一个说“是的,我有一个映射”获奖。

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

如果你不是自己声明它们,那么Spring将使用默认值,这是一个BeanNameUrlHandlerMapping后跟一个DefaultAnnotationHandlerMapping