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