Все реализации HandlerMapping
поддерживают перехватчики обработчиков, которые приносят пользу, если нужно применить специфическую функциональность к определенным запросам – например, проверить наличие основного запроса. Перехватчики должны реализовать HandlerInterceptor
из пакета org.springframework.web.servlet
с тремя методами, которые должны обеспечить достаточную гибкость для выполнения всех видов предварительной и постобработки:
-
preHandle(..)
: Перед выполнением фактического обработчика -
postHandle(..)
: После выполнения обработчика -
afterCompletion(..)
: После завершения выполнения запроса
Метод preHandle(..)
возвращает булево значение. Этот метод можно использовать, чтобы прервать или продолжить обработку цепочки выполнения. Если этот метод возвращает true
, цепочка выполнения обработчика продолжается. Если он возвращает false, DispatcherServlet
считает, что перехватчик сам обработал запросы (и, например, визуализировал соответствующее представление), и не продолжает выполнение других перехватчиков и фактического обработчика в цепочке выполнения.
Также можно зарегистрировать их напрямую, используя сеттеры в отдельных реализациях HandlerMapping
.
Метод postHandle
менее полезен при использовании методов, помеченных аннотацией @ResponseBody
, и методов ResponseEntity
, для которых сообщение записывается и фиксируется внутри HandlerAdapter
и перед postHandle
. Это значит, что уже будет слишком поздно вносить какие-либо изменения в сообщение, например, добавлять дополнительный заголовок. Для таких сценариев можно реализовать ResponseBodyAdvice
и либо объявить его как бин Advice контроллера, либо сконфигурировать его непосредственно для RequestMappingHandlerAdapter
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ