Как установить объекты на контроллере Spring 3.1 MVC с перехватчика? - PullRequest
3 голосов
/ 17 декабря 2011

У меня возникла пара проблем, связанных с перехватчиками, после обновления до 3.1.В версии 3.0.x и более ранних версиях я использовал следующий шаблон для перехвата контроллеров Spring MVC:

  1. Создайте интерфейс, называемый чем-то вроде RoleAware, который определяет один или несколько сеттеров.
  2. Имеет один илибольше контроллеров реализуют интерфейс
  3. Зарегистрируйте новый глобальный перехватчик, который выполняет проверку «экземпляр обработчика RoleAware» в preHandle
  4. Если перехватчик является экземпляром RoleAware, то установите один или несколько объектов наРеализация контроллера

Первая проблема заключается в том, что что-то изменилось в 3.1, поэтому проверка экземпляра не удалась.Я исправил это, используя новые явные элементы в моей конфигурации контекста сервлета.Ничего страшного и немного более чистый подход, чем проверка instanceof.

Вторая проблема заключается в том, что когда я пытаюсь привести обработчик (Controller) к моему интерфейсу RoleAware, я получаю ClassCastException.

Мне бы хотелось решение, которое позволило бы мне продолжать произвольно устанавливать объекты на перехваченных контроллерах.Например, установите объект Role на любых перехваченных контроллерах.Кроме того, я хотел бы узнать больше об изменениях в версии 3.1, которые вызывают этот сбой.

1 Ответ

2 голосов
/ 17 декабря 2011

Справочный документ говорит:

При использовании RequestMappingHandlerMapping фактический обработчик является экземпляром HandlerMethod, который определяет конкретный метод контроллера, который будет вызван.

Так что я думаю, что вы должны просто привести обработчик к HandlerMethod, вызвать его метод getBean() и проверить, является ли возвращаемый компонент экземпляром RoleAware.

Не проверено, хотя,Вы можете попробовать использовать отладчик для проверки аргумента обработчика и посмотреть, что это такое, если он не является ни самим обработчиком, ни HandlerMethod.

...