Все реализации HandlerMapping поддерживают перехватчики обработчиков, которые приносят пользу, если нужно применить специфическую функциональность к определенным запросам – например, проверить наличие основного запроса. Перехватчики должны реализовать HandlerInterceptor из пакета org.springframework.web.servlet с тремя методами, которые должны обеспечить достаточную гибкость для выполнения всех видов предварительной и постобработки:

  • preHandle(..): Перед выполнением фактического обработчика

  • postHandle(..): После выполнения обработчика

  • afterCompletion(..): После завершения выполнения запроса

Метод preHandle(..) возвращает булево значение. Этот метод можно использовать, чтобы прервать или продолжить обработку цепочки выполнения. Если этот метод возвращает true, цепочка выполнения обработчика продолжается. Если он возвращает false, DispatcherServlet считает, что перехватчик сам обработал запросы (и, например, визуализировал соответствующее представление), и не продолжает выполнение других перехватчиков и фактического обработчика в цепочке выполнения.

Также можно зарегистрировать их напрямую, используя сеттеры в отдельных реализациях HandlerMapping.

Метод postHandle менее полезен при использовании методов, помеченных аннотацией @ResponseBody, и методов ResponseEntity, для которых сообщение записывается и фиксируется внутри HandlerAdapter и перед postHandle. Это значит, что уже будет слишком поздно вносить какие-либо изменения в сообщение, например, добавлять дополнительный заголовок. Для таких сценариев можно реализовать ResponseBodyAdvice и либо объявить его как бин Advice контроллера, либо сконфигурировать его непосредственно для RequestMappingHandlerAdapter.