Как я могу изменить порядок сопоставления URL-адресов в Spring MVC? - PullRequest
1 голос
/ 10 августа 2010

Я использую 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 ]

2 голосов
/ 11 августа 2010

Лучшим решением, которое я нашел, было заменить mvc: annotation-config на явное DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter конфигурация компонента. Затем я смог установить свойство order для SimpleUrlHandlerMapping (order = 0) и DefaultAnnotationHandlerMapping (order = 1). Это установило приоритет обработчиков так, как мне нужно.

Я попытался изменить порядок mvc: annotation-config ниже SimpleUrlHandlerMapping , но он не изменил приоритет обработчика при необходимости.

0 голосов
/ 10 августа 2010

DispatcherServlet должен обращаться к различным HandlerMapping bean-компонентам в порядке, в котором они объявлены в файле bean-компонентов. Первый, который говорит «да, у меня есть карта для этого» получает приз.

Если вы вручную объявляете SimpleUrlHandlerMapping и DefaultAnnotationHandlerMapping, убедитесь, что они в правильном порядке.

Если вы не объявляете их самостоятельно, то Spring будет использовать значения по умолчанию, то есть BeanNameUrlHandlerMapping, за которыми следует DefaultAnnotationHandlerMapping.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...