Sie implementieren also Spring in Ihr Projekt und dann erscheint gemäß Murphys Gesetz eine Ausnahme. Aber keine Panik – Spring verfügt über leistungsstarke Fehlerbehandlungsfunktionen! Lassen Sie uns genau herausfinden, wie Sie diese Funktionen nutzen können.
Geprüfte und ungeprüfte Ausnahmen: Warum ist alles so verwirrend?
Java unterteilt Ausnahmen in zwei Typen: aktivierte und nicht aktivierte. Geprüfte Ausnahmen erfordern eine explizite Behandlung. Stellen Sie sich zwei Zebrastreifen vor, durch die Menschen gehen. Eine Kreuzung wird von einem strengen Inspektor mit einem „Strict Control“-Schild bewacht. Hier wird jede Person kontrolliert, und wenn sie keine Durchlasserlaubnis hat, wird sie nicht durchgelassen. Dieser Übergang ist analog zu geprüften Ausnahmen: Sie erfordern eine obligatorische Verarbeitung, andernfalls wird das Programm nicht kompiliert.
Der zweite Übergang hingegen wird nicht kontrolliert. Die Menschen passieren es frei und schnell, ohne jegliche Kontrolle. Dies ist analog zu ungeprüften Ausnahmen: Solche Ausnahmen erfordern keine Behandlung und der Code kann auch ohne Fehlerprüfung ausgeführt werden. Im Falle eines Fehlers erscheint dieser jedoch unerwartet – direkt auf der „Straße“.
public void someMethod() throws IOException { throw new IOException("Oops, checked exception!"); }
@ExceptionHandler: Wenn Bugs VIP-Behandlung erhalten
@ExceptionHandler ist Ihr persönlicher „Bouncer“, der Ausnahmen nur für bestimmte Methoden oder Klassen abfängt und behandelt. Wenn Sie bestimmten Fehlern eine VIP-Behandlung zukommen lassen möchten, kommentieren Sie die Methode mit @ExceptionHandler und genießen Sie es.
public void someMethod() throws IOException { throw new IOException("Oops, checked exception!"); }
Wenn jetzt eine ResourceNotFoundException auftritt, gibt Ihr Handler stillschweigend eine freundliche Nachricht aus, anstatt dass der Benutzer einen beängstigenden Fehlerstapel sieht.
@ControllerAdvice: wann links und rechts Ratschläge gegeben werden sollten
Wenn @ExceptionHandler nur für eine bestimmte Klasse funktioniert, dann ist @ControllerAdvice der König der Warteschlangen. Diese Anmerkung deckt alle Controller ab, damit keine Fehler mehr durchsickern!
@ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) { return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND); }
Mit diesem Code werden alle nicht erfassten Fehler abgefangen und mit einer einzigen Nachricht verarbeitet. Es ist wie eine „All-Inclusive“-Einstellung für Ausnahmen – bequem und sicher.
@ResponseStatus: wenn Sie die Ausnahme ausdrucksvoller machen möchten
Manchmal erfassen Standard-HTTP-Status das Wesen der Ausnahme nicht ganz. Aber mit @ResponseStatus können Sie Ausnahmen erzwingen, damit diese aussagekräftiger sind.
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleGlobalException(Exception ex) { return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR); } }
Wenn nun eine ResourceNotFoundException ausgelöst wird, gibt Spring automatisch den Status 404 zurück, ohne dass Sie dazu gezwungen werden müssen. Eine großartige Möglichkeit, Drama hinzuzufügen, nicht wahr?
@RestControllerAdvice: für REST-Liebhaber
@RestControllerAdvice ist wie @ControllerAdvice, jedoch ausschließlich für REST-Controller. Das heißt, es ist die beste Wahl zum Erstellen einer API, da es JSON anstelle von HTML-Seiten zurückgibt. Unterstützung für echte REST-Fans!
public void someMethod() throws IOException { throw new IOException("Oops, checked exception!"); }
Dieser Ansatz stellt sicher, dass Ihre Benutzer immer strukturierte Antworten im JSON-Format erhalten, wodurch Ihre APIs noch benutzerfreundlicher werden.
Benutzerdefinierte Ausnahmen: wenn Standardausnahmen nicht ausreichen
Irgendwann wird Ihnen klar, dass die Standard-Exception und RuntimeException einfach nicht die ganze Tragödie Ihrer Situation ausdrücken. Nun, erstellen Sie Ihre eigenen Ausnahmen! Benutzerdefinierte Ausnahmen verleihen ein wenig Persönlichkeit, und Spring behandelt sie immer noch mit Respekt.
@ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) { return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND); }
Erstellen Sie einen Handler dafür, und Benutzer Ihrer Anwendung sehen eine klare Nachricht und keine gruseligen Zeilen.
Fazit
Die Fehlerbehandlung im Frühjahr ist eine Kunst. Von der Verarbeitung auf Methodenebene bis zur globalen Verarbeitung, von JSON-Antworten bis hin zu benutzerdefinierten Status – die Möglichkeiten sind wirklich riesig.
Ergreifen Sie also @ExceptionHandler, @ControllerAdvice und @ResponseStatus und verwandeln Sie Ausnahmen in eine Meisterklasse im Fehlermanagement. Spring ist bereit, Ihnen bei der Bewältigung von Fehlern zu helfen und vor den Benutzern Ihr Gesicht zu wahren
Das obige ist der detaillierte Inhalt vonAusnahmen im Frühling: So bändigen Sie Ihre Fehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!