[JAVA] [Spring Boot] Ich habe untersucht, wie die Nachbearbeitung der empfangenen Anforderung implementiert werden kann.

Ich bin verantwortlich für ein Projekt, das die API-API-Kooperationsverarbeitung mit einem externen Dienst realisiert. Notieren Sie sich die verschiedenen Recherchen / Umsetzungen des Titels.

Umgebung

Bedarf

Die verantwortliche Person auf der externen Service-Seite sagte Folgendes.

Als Antwort auf das oben Gesagte habe ich beim Entwerfen der API auf dieser Seite über Folgendes nachgedacht.

Wenn ich das oben genannte mache, frage ich mich, ob es den Anforderungen externer Dienste gerecht wird. Auch hier ist es einfacher, das zurückzugeben, was Sie zuerst zurückgeben. Das Codebild ist unten.

SampleController.java


@RestController
public class SampleController() {
    //Anfragen von externen Diensten annehmen
    @RequestMapping(value = "/sample")
    public String sample(@Validated SampleForm form) {
        //Minimale Verarbeitung, um eine Antwort zurückzugeben
        return "";
    }

    //Nachbearbeitung(Bild: Wenn Sie diesen Artikel lesen, wird er nicht so implementiert)
    private void after() {
        //Die Verarbeitung ist erforderlich, außer dass eine Antwort zurückgegeben wird
    }
}

Realisierungsmethode

Nach der Untersuchung scheint es, dass es durch "HandlerInterceptor # afterCompletion ()" realisiert werden kann. Ich habe auf den folgenden Artikel verwiesen. Grundlegendes zum Implementieren der allgemeinen Anforderungsverarbeitung in Spring MVC (+ Spring Boot)

HandlerInterceptor ist eine Schnittstelle, die auch Methoden für andere Zwecke als die Nachbearbeitung enthält. Dieses Mal möchte ich also nur die Nachbearbeitung einzeln implementieren Bereiten Sie eine Klasse vor, die "HandlerInterceptorAdapter" erbt. Dies ist eine Implementierungsklasse von "HandlerInterceptor". Aus Sicht der Nachbearbeitung ist "HandlerInterceptor # postHandle ()" ebenfalls ein Kandidat. Dies ist ausgeschlossen, da es nicht unseren Anforderungen entspricht, da es nicht aufgerufen wird, wenn eine Ausnahme auftritt. HandlerInterceptor # afterCompletion () wird aufgerufen, unabhängig davon, ob es normal endet oder eine Ausnahme auftritt.

SampleInterceptor.java


public class SampleInterceptor extends HandlerInterceptorAdapter {
    //Am Ende des Normalen/AfterCompletion, da ich unabhängig von einer abnormalen Beendigung nur die Nachbearbeitung implementieren möchte()Nur überschreiben
    @override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handler, Exception ex) throws Exception {
      //Implementierung nach der Verarbeitung
    }
}

Als nächstes besteht unsere Anforderung darin, die Nachbearbeitung nur auf Anforderungen für "/ sample" im obigen Codebild anzuwenden. Dies kann mit der folgenden Implementierung behoben werden, die auch im obigen Artikel erwähnt wird.

WebMvcConfig.java


@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    //Ich muss die Bohne registrieren
    @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"); //Das Ziel wird hier angegeben
        //Wenn Sie mehrere Interceptors angeben möchten, schreiben Sie diese nebeneinander. Sie können auch mehrere Pfade verketten und angeben
        registry.addInterceptor(hogeInterceptor())
                .addPathPatterns("/hoge").addPathPatterns("/huga")
        //Wenn Sie denselben Pfad in verschiedenen Interceptors angeben, beide afterCompletions()Wird ausgeführt
        //Es wurde nicht untersucht, wie die Ausführungsreihenfolge entschieden wird
                .addPathPatterns("/sample");
                
    }
}

Mit dem Obigen wurde die erforderliche Verarbeitung realisiert. Wenn Sie mit addPathPatterns kein Ziel angeben, scheinen alle Controller einer Nachbearbeitung zu unterliegen.

Der eigentliche Code ist nicht auf den obigen Beispielcode beschränkt, es gibt jedoch noch einige weitere. Das ist alles, was ich aufschreiben möchte.

Recommended Posts

[Spring Boot] Ich habe untersucht, wie die Nachbearbeitung der empfangenen Anforderung implementiert werden kann.
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Ich möchte die Standardfehlermeldung von Spring Boot steuern
So lesen Sie Request Body mit Spring Boot + Spring Security mehrmals
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Booten nach Umgebung mit Spring Boot of Maven
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Über die Funktion von Spring Boot aufgrund unterschiedlicher Versionen
So stellen Sie Spring Boot + PostgreSQL ein
Verwendung von ModelMapper (Spring Boot)
Lassen Sie uns herausfinden, wie Sie mit Request Body mit der REST-API von Spring Boot empfangen können
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
Ich habe die interne Verarbeitung von Retrofit untersucht
So bestimmen Sie die Anzahl der Parallelen
Ich habe versucht, das Iterator-Muster zu implementieren
So sortieren Sie eine Liste von SelectItems
So teilen Sie eine Spring Boot-Nachrichtendatei
So wenden Sie Thymeleaf-Änderungen sofort mit #Spring Boot + maven auf den Browser an
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
So greifen Sie mit der TCP-Funktion von Spring Integration direkt auf Socket zu
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
So implementieren Sie die E-Mail-Authentifizierungsfunktion zum Zeitpunkt der Benutzerregistrierung
So finden Sie die Ursache des Ruby-Fehlers
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
So verkleinern Sie das Spring Boot Docker-Image
So überprüfen Sie die neueste Version von io.spring.platform für das Schreiben in pom.xml von Spring (STS)
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Ich möchte den Inhalt der Absicht var_dump
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
So implementieren Sie die Brotkrumenfunktion mit gretel
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Wie komme ich zum heutigen Tag?
[Für Anfänger] So implementieren Sie die Löschfunktion
Ausgabe der Verwendung der Slice-Methode
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So binden Sie mit einer Eigenschaftendatei in Spring Boot
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
Ich wollte Spring Boot in einem Multiprojekt gradle
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich möchte den Inhalt der Anfrage sehen, ohne vier oder fünf zu sagen
Spring Boot - So stellen Sie das Sitzungszeitlimit ein