Как правильно добавить перехватчики HttpRequest в приложение весенней загрузки? Я хочу регистрировать запросы и ответы на каждый HTTP-запрос.
Документация по загрузке Spring вообще не затрагивает эту тему. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
Я нашел несколько веб-примеров того, как сделать то же самое со старыми версиями spring, но они работают с applicationcontext.xml. Пожалуйста помоги.
java
spring
spring-mvc
spring-boot
ришип89
источник
источник
HandlerInterceptor
успешно реализовал . Работает нормально. Проблема только в том, что некоторыеinternal HandlerInterceptor
генерируют исключение до того, как оно будет обработаноcustom HandlerInterceptor
.afterCompletion()
Метод , который переопределяется вызывается после того , как ошибка возникает при внутренней реализации HandlerInterceptor. У вас есть решение для этого?Ответы:
Поскольку вы используете Spring Boot, я предполагаю, что вы предпочтете по возможности полагаться на автоконфигурацию Spring. Чтобы добавить дополнительную настраиваемую конфигурацию, такую как ваши перехватчики, просто укажите конфигурацию или компонент
WebMvcConfigurerAdapter
.Вот пример класса конфигурации:
ПРИМЕЧАНИЕ: не аннотируйте это с помощью @EnableWebMvc, если вы хотите сохранить автоконфигурацию Spring Boots для mvc .
источник
The type WebMvcConfigurerAdapter is deprecated
. Я использую Spring Web MVC 5.0.6WebMvcConfigurerAdapter
будет устаревшим в Spring 5. Из его Javadoc :Как указано выше, вам следует реализовать
WebMvcConfigurer
и переопределитьaddInterceptors
метод.источник
MyCustomInterceptor
Чтобы добавить перехватчик в приложение весенней загрузки, выполните следующие действия.
Создать класс перехватчика
Определите класс конфигурации
Это оно. Теперь все ваши запросы будут проходить через логику, определенную в методе preHandle () MyCustomInterceptor.
источник
getReader() has already been called for this request
ошибку. Есть ли более простой способ справиться с этим без использования копии фактического запроса?Advice
Поскольку во всех ответах на это используется давно устаревший абстрактный адаптер WebMvcConfigurer вместо WebMvcInterface (как уже отмечалось @sebdooe), вот минимальный рабочий пример для приложения SpringBoot (2.1.4) с перехватчиком:
Minimal.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
работает как рекламируется
Результат будет примерно таким:
источник
У меня была такая же проблема, что WebMvcConfigurerAdapter устарел. Когда я искал примеры, я почти не нашел реализованного кода. Вот фрагмент рабочего кода.
создать класс, расширяющий HandlerInterceptorAdapter
затем реализовать интерфейс WebMvcConfigurer
источник
Вы также можете рассмотреть возможность использования библиотеки SpringSandwich с открытым исходным кодом, которая позволяет вам напрямую аннотировать в контроллерах Spring Boot, какие перехватчики применять, почти так же, как вы аннотируете свои маршруты URL-адресов.
Таким образом, не будет плавающих строк, подверженных опечаткам - методы и аннотации классов SpringSandwich легко выдерживают рефакторинг и дают понять, что и где применяется. (Раскрытие: я автор).
http://springsandwich.com/
источник
Ниже представлена реализация, которую я использую для перехвата каждого HTTP-запроса до его отправки и ответа, который возвращается. Благодаря этой реализации у меня также есть единственная точка, где я могу передать любое значение заголовка с запросом.
Ниже представлен компонент шаблона Rest Template
источник