[JAVA] [Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.

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.

environnement

Exigences

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
    }
}

Méthode de réalisation

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

[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Je veux comprendre le flux des paramètres de demande de traitement Spring
Je veux contrôler le message d'erreur par défaut de Spring Boot
Comment lire le corps de la requête plusieurs fois avec Spring Boot + Spring Security
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
[Spring Boot] Comment se référer au fichier de propriétés
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment démarrer par environnement avec Spring Boot de Maven
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
À propos de la fonction de Spring Boot en raison de différentes versions
Comment configurer Spring Boot + PostgreSQL
Comment utiliser ModelMapper (Spring boot)
Découvrons comment recevoir avec Request Body avec l'API REST de Spring Boot
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
J'ai étudié le traitement interne de Retrofit
Comment déterminer le nombre de parallèles
J'ai essayé d'implémenter le modèle Iterator
Comment trier une liste de SelectItems
Comment diviser un fichier de message Spring Boot
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Comment accéder directement à Socket avec la fonction TCP de Spring Integration
J'ai utilisé Docker pour solidifier le modèle à développer avec Spring Boot.
Comment mettre en œuvre la fonction d'authentification du courrier au moment de l'inscription de l'utilisateur
Comment trouver la cause de l'erreur Ruby
Personnalisez la répartition du contenu de Recyclerview
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Comment réduire l'image de Spring Boot Docker
Comment vérifier la dernière version de io.spring.platform pour l'écriture dans pom.xml de Spring (STS)
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Je veux var_dump le contenu de l'intention
Vérifions la sensation de Spring Boot + Swagger 2.0
Comment mettre en œuvre la fonction de chapelure avec Gretel
Essayez d'implémenter la fonction de connexion avec Spring Boot
Comment obtenir le jour d'aujourd'hui
[Pour les débutants] Comment implémenter la fonction de suppression
Sortie de la façon d'utiliser la méthode slice
Comment ajouter un chemin de classe dans Spring Boot
Comment se lier avec un fichier de propriétés dans Spring Boot
Comment afficher le résultat du remplissage du formulaire
Je voulais classer la botte à ressort dans un multi-projet
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
Je veux voir le contenu de Request sans dire quatre ou cinq
Spring Boot - Comment définir le délai d'expiration de la session