Quelle est la bonne façon d'ajouter des intercepteurs HttpRequest dans l'application Spring Boot? Ce que je veux faire, c'est enregistrer les demandes et les réponses pour chaque demande http.
La documentation de Spring Boot ne couvre pas du tout ce sujet. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )
J'ai trouvé des exemples Web sur la façon de faire de même avec les anciennes versions de Spring, mais ceux-ci fonctionnent avec applicationcontext.xml. Veuillez aider.
java
spring
spring-mvc
spring-boot
riship89
la source
la source
HandlerInterceptor
avec succès. Cela fonctionne bien. Seul le problème est que certainsinternal HandlerInterceptor
lèvent une exception avant qu'elle ne soit gérée par lecustom HandlerInterceptor
. LaafterCompletion()
méthode qui est remplacée est appelée après que l'erreur est levée par l'implémentation interne de HandlerInterceptor. Avez-vous une solution pour cela?Réponses:
Puisque vous utilisez Spring Boot, je suppose que vous préférez vous fier à la configuration automatique de Spring lorsque cela est possible. Pour ajouter une configuration personnalisée supplémentaire comme vos intercepteurs, fournissez simplement une configuration ou un bean de
WebMvcConfigurerAdapter
.Voici un exemple de classe de configuration:
REMARQUE ne pas annoter cela avec @EnableWebMvc, si vous souhaitez conserver la configuration automatique de Spring Boots pour mvc .
la source
The type WebMvcConfigurerAdapter is deprecated
. J'utilise Spring Web MVC 5.0.6WebMvcConfigurerAdapter
sera obsolète avec Spring 5. Depuis sa Javadoc :Comme indiqué ci-dessus, vous devez implémenter
WebMvcConfigurer
et remplacer laaddInterceptors
méthode.la source
MyCustomInterceptor
Pour ajouter un intercepteur à une application de démarrage à ressort, procédez comme suit
Créer une classe d'intercepteur
Définir une classe de configuration
C'est tout. Désormais, toutes vos requêtes passeront par la logique définie sous la méthode preHandle () de MyCustomInterceptor.
la source
getReader() has already been called for this request
erreur. Existe-t-il un moyen plus simple de surmonter cela sans utiliser une copie de la demande réelle?Advice
Étant donné que toutes les réponses à cela utilisent l'adaptateur abstrait WebMvcConfigurer maintenant obsolète depuis longtemps au lieu de WebMvcInterface (comme déjà noté par @sebdooe), voici un exemple minimal de travail pour une application SpringBoot (2.1.4) avec un intercepteur:
Minimal.java:
MinimalController.java:
Config.java:
MinimalInterceptor.java:
fonctionne comme annoncé
La sortie vous donnera quelque chose comme:
la source
J'ai eu le même problème de WebMvcConfigurerAdapter étant obsolète. Quand j'ai cherché des exemples, je n'ai pratiquement trouvé aucun code implémenté. Voici un morceau de code fonctionnel.
créer une classe qui étend HandlerInterceptorAdapter
puis implémenter l'interface WebMvcConfigurer
la source
Vous pouvez également envisager d'utiliser la bibliothèque open source SpringSandwich qui vous permet d'annoter directement dans vos contrôleurs Spring Boot les intercepteurs à appliquer, de la même manière que vous annotez vos routes d'url.
De cette façon, pas de chaînes sujettes à des fautes de frappe - la méthode et les annotations de classe de SpringSandwich survivent facilement à la refactorisation et indiquent clairement ce qui est appliqué et où. (Divulgation: je suis l'auteur).
http://springsandwich.com/
la source
Vous trouverez ci-dessous une implémentation que j'utilise pour intercepter chaque requête HTTP avant qu'elle ne s'éteigne et la réponse qui revient. Avec cette implémentation, j'ai également un point unique où je peux passer n'importe quelle valeur d'en-tête avec la demande.
Vous trouverez ci-dessous le bean de modèle de repos
la source