Je suis en charge d'un projet qui réalise un traitement de coopération API ⇔ API avec un service externe. Prenez note des différentes recherches / implémentations du titre.
Le responsable du côté des services externes a déclaré ce qui suit.
En réponse à ce qui précède, lorsque j'ai conçu l'API de ce côté, j'ai pensé à ce qui suit.
Si je fais ce qui précède, je me demande si cela répondra aux demandes des services externes. Même ici, il est plus facile de rendre ce que vous retournez en premier. L'image de code est ci-dessous.
SampleController.java
@RestController
public class SampleController() {
//Accepter les demandes de services externes
@RequestMapping(value = "/sample")
public String sample(@Validated SampleForm form) {
//Traitement minimal pour renvoyer une réponse
return "";
}
//Post-traitement(Image: Si vous lisez cet article, il ne sera pas implémenté comme ceci)
private void after() {
//Traitement requis autre que le renvoi d'une réponse
}
}
Après enquête, il semble que cela puisse être réalisé par HandlerInterceptor # afterCompletion ()
.
J'ai fait référence à l'article suivant.
Comprendre comment implémenter le traitement des requêtes courantes sur Spring MVC (+ Spring Boot)
HandlerInterceptor
est une interface qui a également des méthodes à des fins autres que le post-traitement,
Cette fois, je souhaite implémenter uniquement le post-traitement individuellement, donc
Préparez une classe qui hérite de HandlerInterceptorAdapter
, qui est une classe d'implémentation de HandlerInterceptor
.
Aussi, du point de vue du post-traitement, HandlerInterceptor # postHandle ()
est également un candidat,
Nous l'avons exclu car il ne répond pas à nos exigences car il ne sera pas appelé lorsqu'une exception se produit.
HandlerInterceptor # afterCompletion ()
est appelé qu'il se termine normalement ou qu'une exception se produise.
SampleInterceptor.java
public class SampleInterceptor extends HandlerInterceptorAdapter {
//À la fin de la normale/AfterCompletion car je souhaite implémenter uniquement le post-traitement indépendamment de l'arrêt anormal()Remplacer uniquement
@override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) throws Exception {
//Implémentation post-traitement
}
}
Ensuite, notre exigence est d'appliquer le post-traitement uniquement aux demandes de / sample
dans l'image de code ci-dessus.
Cela peut être résolu avec l'implémentation suivante, qui est également mentionnée dans l'article ci-dessus.
WebMvcConfig.java
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
//Je dois enregistrer le haricot
@Bean
public SampleInterceptor sampleInterceptor() {
return new SampleInterceptor();
}
@Bean
public HogeInterceptor hogeInterceptor() {
return new HogeInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sampleInterceptor())
.addPathPatterns("/sample"); //La cible est spécifiée ici
//Si vous souhaitez spécifier plusieurs intercepteurs, écrivez-les côte à côte. Vous pouvez également chaîner et spécifier plusieurs chemins
registry.addInterceptor(hogeInterceptor())
.addPathPatterns("/hoge").addPathPatterns("/huga")
//Si vous spécifiez le même chemin dans différents intercepteurs, les deux afterCompletions()Est exécuté
//Il n'a pas été examiné comment l'ordre d'exécution est décidé
.addPathPatterns("/sample");
}
}
Avec ce qui précède, le traitement requis a été réalisé. Si vous ne spécifiez pas de cible avec ʻaddPathPatterns`, tous les contrôleurs semblent être soumis à un post-traitement.
Le code réel n'est pas limité à l'exemple de code ci-dessus, mais il y en a quelques autres. C'est tout ce que je veux écrire.
Recommended Posts