Как я могу изменить упорядочивание отображенных URL в 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 в моем приложении.

1
задан Robert Campbell 10 August 2010 в 11:35
поделиться

2 ответа

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

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

2
ответ дан 2 September 2019 в 22:17
поделиться

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

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

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

0
ответ дан 2 September 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: