Erstellen wir eine TODO-Anwendung mit Java 11-Ausnahmebehandlung, wenn Sie mit einer nicht vorhandenen ID auf TODO zugreifen

Hallo.

Dies ist eine Reihe von TODO-Apps mit Java + Spring, aber ab diesem Zeitpunkt werden wir endlich die Ausnahmebehandlung implementieren.

Ich möchte von einem relativ einfachen Ort aus beginnen, um mich an die Ausnahmebehandlung zu gewöhnen. Schauen wir uns also die Ausnahmebehandlung beim Zugriff auf eine nicht vorhandene ID an!

Linkerfassung zur Erstellung von TODO-Anwendungen

1: [Grundlegendes zu den Super-Grundlagen] Eine kurze Beschreibung von MVC 2: [Vorlage vorbereiten] Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hallo-Welt erstellen 3: [Verbindung / Einstellungen / Datenanzeige mit MySQL] Temporäre Daten in MySQL speichern-> Alle abrufen-> Oben anzeigen 4: [POST-Funktion] Implementierung der Posting-Funktion 5: [PATCH-Funktion] TODO-Anzeige umschalten 6: [Einfach zu verwendendes JpaRepository] Implementierung der Suchfunktion [7: [Häufig mit Thymeleaf-Vorlagenfragmenten] Header erstellen] (https://qiita.com/nomad_kartman/items/8c33eca2880c43a06e40) [8: [PUT-Funktion] Implementierung der Bearbeitungsfunktion] (https://qiita.com/nomad_kartman/items/66578f3f91a422f9207d) [9: [Tweak] TODO-Anzeige in chronologischer Reihenfolge sortieren + Fälligkeitsdatum auf heutiges Datum setzen] (https://qiita.com/nomad_kartman/items/5ee2b13a701cf3eaeb15) 10: [Ausnahmebehandlung mit Spring] Eine kurze Zusammenfassung der Ausnahmebehandlung 11: [Ausnahmebehandlung mit Feder] Ausnahmebehandlung beim Zugriff auf TODO mit nicht vorhandener ID (jetzt hier)

Überlegen Sie, wie die Ausnahmebehandlung behandelt wird

Übrigens habe ich in Letzter Artikel kurz erklärt, was Ausnahmebehandlung ist.

Zusammenfassend

Sicherheit durch Weiterleiten an eine bestimmte Fehlerseite, wenn der Benutzer eine unbeabsichtigte Anfrage des Erstellers stellt (Eingabe von mehr Zeichen als bei der Registrierung von TODO angegeben, Versuch, auf eine nicht vorhandene URL zuzugreifen ... usw.) Verbessern Sie die Oberfläche und Benutzerfreundlichkeit.

Es bedeutet das.

Ablauf der Ausnahmebehandlung

Dieses Mal implementieren wir es, wenn Sie den Zugriff auf TODO mit einer nicht vorhandenen ID anfordern.

Überprüfen Sie zuerst die Steuerung

com/example/todo/TodoController.java


    @GetMapping("/edit/{id}")
    public String showEdit(Model model, @PathVariable("id") long id ) {
        TodoEntity editTarget = todoService.findTodoById(id);
        model.addAttribute( "editTarget" , editTarget);
        return "edit";
    }

Ausnahmeverarbeitung beim Aufruf dieses showEdit. todoService.findTodoById (id) ruft TODO über die Service-Klasse ab, aber schauen wir uns findTodoById () an.

Überprüfen Sie findTodoById () der Serviceklasse

com/example/todo/TodoService.java


    public TodoEntity findTodoById(Long todoId) {
        Optional<TodoEntity> todoResult = todoRepository.findById(todoId);
        return todoResult.get();
    }

Die ID wird aus dem Repository durchsucht, das TODO wird erfasst und als optionaler Typ zurückgegeben.

Wenn Sie jedoch versuchen, mit einer ID zu suchen, die hier nicht vorhanden ist, schlägt dies mit einem Fehler fehl, also zu diesem Zeitpunkt

** Wenn todoResult leer ist, führen Sie zu einer bestimmten Ausnahmeklasse **

Du solltest es tun!

Spezifische Ausnahmeklasse?

com/example/todo/exception/TodoNotFoundException.java


package com.example.todo.exception;
public class TodoNotFoundException extends RuntimeException{
}

Erstellen Sie ein neues Verzeichnis mit dem Namen "Ausnahme" und erstellen Sie eine Klasse mit dem Namen "TodoNotFoundException".

erweitert bedeutet, dass diese Klasse von RuntimeException erbt. Durch das Erben kann die Methode "RunttimeException" auch in dieser Klasse verwendet werden. (Ich werde es dieses Mal nicht benutzen ...)

Anleitung zur TodoNotFoundException-Klasse, wenn todoResult in findTodoById () leer ist

com/example/todo/TodoService.java


    public TodoEntity findTodoById(Long todoId) {
        Optional<TodoEntity> todoResult = todoRepository.findById(todoId);
        todoResult.orElseThrow(TodoNotFoundException::new);
        return todoResult.get();
    }

Werfen wir einen Blick auf die eine Zeile, die wir vor der Rückkehr hinzugefügt haben!

Durch Festlegen von "Optional.orElseThrow (Exception name :: new)" können Sie den Prozess zur angegebenen Klasse überspringen, wenn der optionale Typ leer ist. (Diesmal die TodoNotFoundException, die ich zuvor gemacht habe)

Übrigens wird der Teil von Exception name :: new als Methodenreferenz bezeichnet und bezieht sich auf die Methode als Argument der Methode.

Dieser Artikel ist hilfreich. Schauen Sie also bitte vorbei.

Erstellen Sie eine Klasse, die TodoNotFoundException verwaltet.

Die zuvor erstellte "TodoNotFoundException" hat gerade die "RuntimeException" geerbt und der Inhalt war leer.

com/example/todo/exception/TodoNotFoundException.java


package com.example.todo.exception;
public class TodoNotFoundException extends RuntimeException{
}

Hier implementieren wir mithilfe der Annotation @ControllerAdvice die Verarbeitung **, wenn ** TodoNotFoundException aufgerufen wird (= wenn sie ausgelöst wird) **.

com/example/todo/exception/TodoControllerAdvice.java


package com.example.todo.exception;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@Slf4j
@ControllerAdvice
public class TodoControllerAdvice {
    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ExceptionHandler(TodoNotFoundException.class)
    public String idNotFound() {
        log.warn("Das angegebene TODO kann nicht gefunden werden.");
        return "error/404.html";
    }
}

Erstellen wir eine solche Klasse im Verzeichnis exception.

In der Reihenfolge von oben zu erklären ...

@Slf4j
Mit dieser Anmerkung können Sie das Protokoll anzeigen. Sie können das Protokoll im Terminal mit log.warn ("Inhalt") oder log.info ("Inhalt") anzeigen.
@ControllerAdvice
Gibt an, dass diese Klasse ControllerAdvice ist. Sie können festlegen, was zu tun ist, wenn in TodoController eine Ausnahme auftritt.
@ResponseStatus(HttpStatus.NOT_FOUND)
Gibt HttpStatus als Not_Found zurück.
@ExceptionHandler(TodoNotFoundException.class)
Dies ist wichtig, aber unter Verwendung dieser Annotation wird angegeben, dass idNotFound () verarbeitet werden soll, wenn TodoNotFoundException bei der Verarbeitung in TodoController auftritt. In dieser Funktion wird bei der Ausgabe des Fehlerprotokolls error / 404.html angezeigt.

Fehlerseite erstellen

templates/error/404.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>
404!
</body>
</html>

Normalerweise sollte der Fehlerinhalt angezeigt werden, diesmal ist es einfach 404! Ich möchte nur anzeigen.

Zusammenfassung des diesmal implementierten Ablaufs der Ausnahmeverarbeitung

Nun, ich habe alles auf einmal erklärt, daher mag es verwirrend sein, aber das Folgende ist eine Zusammenfassung dieses Prozesses.

・ Benutzer fordert Todo edit an (800 / edit / 100)

-Der Controller sendet den Prozess auf Anfrage an die Serviceklasse (findTodoById (100)).

- TodoControllerAdvice mit @ControllerAdvice gibt ein Protokoll mit der Aufschrift "Das angegebene TODO kann nicht gefunden werden" aus und wechselt zu 404.html.

Es ist so!

Es kann etwas schwierig sein zu verstehen, ob es sich um einen Satz handelt. Ich denke, Sie sollten den Artikel [hier] lesen (https://dkssksk.com/springbootxceptionhandler/).

Wir werden das nächste Mal weiterhin die Ausnahmebehandlung implementieren!

Recommended Posts

Erstellen wir eine TODO-Anwendung mit Java 11-Ausnahmebehandlung, wenn Sie mit einer nicht vorhandenen ID auf TODO zugreifen
Lassen Sie uns eine TODO-App in Java 6 erstellen. Implementierung der Suchfunktion
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Lassen Sie uns eine TODO-App in Java 5 erstellen. Schalten Sie die Anzeige von TODO um
Erstellen wir eine TODO-Anwendung mit Java 12-Verarbeitung, wenn eine Anforderung mit einer nicht verwendeten HttpMethod eingeht. ・ Verarbeitung, wenn ein Fehler auf dem Server auftritt
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
Lassen Sie uns eine TODO-Anwendung mit Java 2 erstellen. Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hello-Welt erstellen
Erstellen Sie eine TODO-App in Java 7 Create Header
Erstellen wir eine TODO-App in Java 13 TODO-Formularvalidierung 1: Zeichenbegrenzung · Gradle-Update zur Verwendung von @Validated
Erstellen wir eine TODO-App mit Java 3 Speichern Sie temporäre Daten in MySQL-> Get all-> Display on top
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
Erstellen wir eine TODO-App in Java 9 Erstellen einer TODO-Anzeige Sortieren nach Datum und Uhrzeit + Setzen Sie das Fälligkeitsdatum auf das aktuelle Datum
Ausnahmebehandlungstechniken in Java
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Ausnahmebehandlung mit einer Fluidschnittstelle
Los geht's mit Watson Assistant (ehemals Conversation) ⑤ Erstellen Sie einen Chatbot mit Watson + Java + Slack
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Erstellen Sie mit Dropwizard eine einfache Webanwendung
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Erstellen wir eine vielseitige Dateispeicher (?) - Operationsbibliothek, indem wir die Dateispeicherung / -erfassung mit Java abstrahieren
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Erstellen Sie mit SwiftUI 2.0 eine benutzerdefinierte Registerkartenansicht
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Ein Hinweis, wenn Sie Tupel in Java möchten
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]
Fragen in Java-Ausnahmebehandlung werfen und versuchen-fangen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ein Memo, als ich versuchte, "über das Schreiben einer Java-Anwendung in Eclipse und das Veröffentlichen in Kubernetes in einem Liberty-Container (Teil 1) zu sprechen".
[Java] Ausnahmebehandlung
☾ Java / Ausnahmebehandlung
Informationen zur Behandlung von Java-Ausnahmen
Behandlung von Java-Ausnahmen
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [0. Basisdatei]
[Java] Berücksichtigung beim Umgang mit negativen Binärzahlen mit Integer.parseInt ()
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [4. Tools hinzufügen]
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Java] Lass uns einen Minecraft Mod 1.14.4 erstellen [5. Rüstung hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Extra Edition]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [7. Fortschritt hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [6. Rezept hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Element hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Basisdatei]
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [1. Element hinzufügen]
So erstellen Sie einen Daten-URI (base64) in Java
Implementieren Sie Singleton mit Enum schnell in Java
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Was ich beim Erstellen eines Servers in Java gelernt habe
Ausgabe true mit if (a == 1 && a == 2 && a == 3) in Java (Invisible Identifier)
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [2. Fügen Sie einen Block hinzu]
Erstellen Sie eine JAVA WEB App und probieren Sie OMC APM aus