¿Cuál es la forma correcta de agregar interceptores HttpRequest en la aplicación Spring Boot? Lo que quiero hacer es registrar solicitudes y respuestas para cada solicitud http.
La documentación de Spring Boot no cubre este tema en absoluto. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
Encontré algunas muestras web sobre cómo hacer lo mismo con versiones anteriores de Spring, pero funcionan con applicationcontext.xml. Por favor ayuda.
java
spring
spring-mvc
spring-boot
riship89
fuente
fuente
HandlerInterceptor
éxito. Funciona bien. El único problema es que algunosinternal HandlerInterceptor
lanzan una excepción antes de que sea manejada porcustom HandlerInterceptor
. ElafterCompletion()
método que se reemplaza se llama después de que la implementación interna de HandlerInterceptor arroja el error. ¿Tienes una solución para esto?Respuestas:
Dado que está utilizando Spring Boot, supongo que prefiere confiar en la configuración automática de Spring siempre que sea posible. Para agregar una configuración personalizada adicional como sus interceptores, solo proporcione una configuración o un bean de
WebMvcConfigurerAdapter
.Aquí hay un ejemplo de una clase de configuración:
NOTA no anote esto con @EnableWebMvc, si desea mantener la configuración automática de Spring Boots para mvc .
fuente
The type WebMvcConfigurerAdapter is deprecated
. Estoy usando Spring Web MVC 5.0.6WebMvcConfigurerAdapter
quedará obsoleto con Spring 5. Desde su Javadoc :Como se indicó anteriormente, lo que debe hacer es implementar
WebMvcConfigurer
y anular eladdInterceptors
método.fuente
MyCustomInterceptor
Para agregar interceptor a una aplicación de arranque de primavera, haga lo siguiente
Crea una clase de interceptor
Definir una clase de configuración
Eso es. Ahora todas sus solicitudes pasarán por la lógica definida en el método preHandle () de MyCustomInterceptor.
fuente
getReader() has already been called for this request
error. ¿Existe alguna forma más sencilla de superar esto sin usar una copia de la solicitud real?Advice
Dado que todas las respuestas a esto hacen uso del Adaptador WebMvcConfigurer abstracto ahora obsoleto en lugar de WebMvcInterface (como ya lo señaló @sebdooe), aquí hay un ejemplo mínimo funcional para una aplicación SpringBoot (2.1.4) con un Interceptor:
Mínimo.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
funciona como se anuncia
La salida le dará algo como:
fuente
Tuve el mismo problema de que WebMvcConfigurerAdapter estaba en desuso. Cuando busqué ejemplos, casi no encontré ningún código implementado. Aquí hay un fragmento de código de trabajo.
crear una clase que amplíe HandlerInterceptorAdapter
luego implementar la interfaz WebMvcConfigurer
fuente
También puede considerar usar la biblioteca SpringSandwich de código abierto que le permite anotar directamente en sus controladores Spring Boot qué interceptores aplicar, de la misma manera que anota sus rutas de URL.
De esa manera, no hay cadenas propensas a errores tipográficos flotando: el método de SpringSandwich y las anotaciones de clase sobreviven fácilmente a la refactorización y dejan en claro qué se está aplicando y dónde. (Divulgación: soy el autor).
http://springsandwich.com/
fuente
A continuación se muestra una implementación que utilizo para interceptar cada solicitud HTTP antes de que salga y la respuesta que regresa. Con esta implementación, también tengo un solo punto donde puedo pasar cualquier valor de encabezado con la solicitud.
A continuación se muestra el frijol de plantilla de descanso
fuente