Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Fehlerbehandlung | RESTful API
Spring Boot Backend

bookFehlerbehandlung

Exception-Handling in einer REST-API mit Spring Boot ist ein entscheidender Aspekt der Entwicklung, der eine effektive Verwaltung von Fehlern ermöglicht und Clients über auf dem Server aufgetretene Probleme informiert. Im Folgenden wird dieser Prozess näher betrachtet.

Wie hilft es, den Client über Fehler zu informieren?

Fehlerbehandlung in einer REST-API hilft, das Format der Fehlerantworten zu standardisieren, wodurch es für Clients einfacher wird, mit den Antworten zu arbeiten. Dadurch werden sie über die Ursachen der Fehler informiert, was es den Clients ermöglicht, zu verstehen, was schiefgelaufen ist und wie das Problem behoben werden kann.

Darüber hinaus ermöglicht eine solche Behandlung die Unterscheidung zwischen Fehlertypen, wie zum Beispiel Validierungsfehlern oder Zugriffsproblemen, wodurch die Fehlermeldungen präziser und hilfreicher werden.

Implementierung des Exception-Handlings mit Annotationen

Spring Boot stellt verschiedene Werkzeuge für die Fehlerbehandlung bereit. Die wichtigsten sind die Annotationen @ControllerAdvice und @ExceptionHandler.

Die Annotation @ControllerAdvice ermöglicht es, globale Fehlerbehandlungsroutinen für alle Controller in der Anwendung zu definieren. Dies unterstützt die Zentralisierung der Fehlerbehandlung und verhindert Code-Duplikation.

Innerhalb einer mit @ControllerAdvice annotierten Klasse geben mit @ExceptionHandler annotierte Methoden an, welche Ausnahmetypen eine bestimmte Methode behandeln soll. Dies vereinfacht das Fehlermanagement und sorgt für übersichtlicheren und strukturierteren Code.

GlobalExceptionHandler.java

GlobalExceptionHandler.java

copy
12345678
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { // error handling } }

Innerhalb dieser Klasse wird die Methode handleException() aufgerufen, wenn eine Ausnahme vom Typ ApiException in der Anwendung auftritt. Die Annotation @ExceptionHandler(ApiException.class) zeigt an, dass diese Methode Ausnahmen dieses spezifischen Typs behandelt.

Erstellen einer benutzerdefinierten Ausnahme

Aber was genau ist die ApiException? Es handelt sich um eine benutzerdefinierte Ausnahme, die speziell für unsere API erstellt wurde. Wir können eigene Ausnahmen erstellen und diese in unserer REST-API verwenden.

Weitere Informationen zum Erstellen eigener benutzerdefinierter Ausnahmen finden Sie hier.

ApiException.java

ApiException.java

copy
12345678910111213141516
public class ApiException extends RuntimeException { // HTTP status code associated with this exception private final HttpStatus httpStatus; // Constructor to initialize the exception with a message and an HTTP status public ApiException(String message, HttpStatus httpStatus) { super(message); this.httpStatus = httpStatus; } // Getter method to retrieve the HTTP status public HttpStatus getHttpStatus() { return httpStatus; } }

Dieser Code definiert die Klasse ApiException, die RuntimeException erweitert und ein zusätzliches Feld httpStatus zur Speicherung des HTTP-Status enthält. Der Konstruktor der Klasse nimmt eine Nachricht und einen HTTP-Status entgegen, die dann an den Basiskonstruktor übergeben und im Feld httpStatus gespeichert werden.

Danach kann eine Ausnahme aus unserer Anwendung ausgelöst werden:

Main.java

Main.java

copy
1234567891011
public BookResponseDTO updateBook(String id, BookRequestDTO book) { Book modelBook = MapperBook.dtoRequestToModel(book); Book repositoryBook = bookRepository.updateBook(id, modelBook); // If the book was not found in the repository, throw an ApiException with a NOT_FOUND status if (repositoryBook == null) { throw new ApiException("Not found book by id: " + id, HttpStatus.NOT_FOUND); } return MapperBook.modelToResponseDto(repositoryBook); }

Dieser Ausnahmetyp wird von einer Methode handleException(ApiException ex) abgefangen, die speziell für die Behandlung dieser Ausnahme vorgesehen ist. Innerhalb dieser Methode kann die Logik zur Verwaltung der Ausnahme definiert werden.

Die gewünschte Logik besteht darin, Ausnahmen im Zusammenhang mit der API abzufangen und eine strukturierte Antwort mit Fehlerinformationen sowie dem entsprechenden HTTP-Status zurückzugeben.

Main.java

Main.java

copy
123456789
@ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { return new ResponseEntity<>(ErrorResponse .builder() .error(ex.getMessage()) .build(), ex.getHttpStatus() ); }

Dieser Code behandelt die ApiException, indem eine ResponseEntity mit Fehlerinformationen erstellt wird. Die Methode handleException() konstruiert ein Objekt vom Typ ErrorResponse mit der Nachricht aus der Exception und setzt den HTTP-Status aus dem Feld httpStatus der Exception. Dieses wird an den Client zurückgegeben.

Das Feld httpStatus wurde initialisiert, als die Exception in der Anwendung ausgelöst wurde.

ErrorResponse ist eine Klasse, die Informationen über den Fehler bereitstellt. Sie enthält ein Feld error, das die Fehlerbeschreibung anzeigt und mit den Annotationen @Data und @Builder erstellt wird.

ErrorResponse.java

ErrorResponse.java

copy
12345
@Data @Builder public class ErrorResponse { private String error; }

Die Annotation @Builder von Lombok vereinfacht die Objekterstellung durch die Implementierung des Builder-Musters. Sie ermöglicht eine besser lesbare und wartbare Art, Objekte zu erstellen, insbesondere solche mit vielen Parametern. Zum Beispiel kann eine Instanz von ErrorResponse wie folgt erstellt werden:

ErrorResponse.builder().error("ERROR").build();

Die Methode builder() initialisiert einen neuen Builder für die Klasse ErrorResponse. Die Methode error("ERROR") setzt das Feld error auf "ERROR" und die Methode build() erstellt das endgültige ErrorResponse-Objekt mit dem angegebenen Wert.

Fehlerbehandlung in unserer Anwendung

Zusammenfassung

Exception Handling in einer REST-API zentralisiert das Fehlermanagement, indem es ein einheitliches Antwortformat für den Client bereitstellt. Dies vereinfacht das Verständnis und die Behandlung von Fehlern, da Clients klare und strukturierte Meldungen erhalten.

Der Einsatz der Annotationen @ControllerAdvice und @ExceptionHandler ermöglicht die Anpassung der Behandlung verschiedener Ausnahmen, während benutzerdefinierte Ausnahmen zusätzliche Informationen wie den HTTP-Status enthalten können.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain how to create a custom exception in Spring Boot?

What is the purpose of the ErrorResponse class in this context?

How does @ControllerAdvice improve error handling in a REST API?

Awesome!

Completion rate improved to 3.45

bookFehlerbehandlung

Swipe um das Menü anzuzeigen

Exception-Handling in einer REST-API mit Spring Boot ist ein entscheidender Aspekt der Entwicklung, der eine effektive Verwaltung von Fehlern ermöglicht und Clients über auf dem Server aufgetretene Probleme informiert. Im Folgenden wird dieser Prozess näher betrachtet.

Wie hilft es, den Client über Fehler zu informieren?

Fehlerbehandlung in einer REST-API hilft, das Format der Fehlerantworten zu standardisieren, wodurch es für Clients einfacher wird, mit den Antworten zu arbeiten. Dadurch werden sie über die Ursachen der Fehler informiert, was es den Clients ermöglicht, zu verstehen, was schiefgelaufen ist und wie das Problem behoben werden kann.

Darüber hinaus ermöglicht eine solche Behandlung die Unterscheidung zwischen Fehlertypen, wie zum Beispiel Validierungsfehlern oder Zugriffsproblemen, wodurch die Fehlermeldungen präziser und hilfreicher werden.

Implementierung des Exception-Handlings mit Annotationen

Spring Boot stellt verschiedene Werkzeuge für die Fehlerbehandlung bereit. Die wichtigsten sind die Annotationen @ControllerAdvice und @ExceptionHandler.

Die Annotation @ControllerAdvice ermöglicht es, globale Fehlerbehandlungsroutinen für alle Controller in der Anwendung zu definieren. Dies unterstützt die Zentralisierung der Fehlerbehandlung und verhindert Code-Duplikation.

Innerhalb einer mit @ControllerAdvice annotierten Klasse geben mit @ExceptionHandler annotierte Methoden an, welche Ausnahmetypen eine bestimmte Methode behandeln soll. Dies vereinfacht das Fehlermanagement und sorgt für übersichtlicheren und strukturierteren Code.

GlobalExceptionHandler.java

GlobalExceptionHandler.java

copy
12345678
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { // error handling } }

Innerhalb dieser Klasse wird die Methode handleException() aufgerufen, wenn eine Ausnahme vom Typ ApiException in der Anwendung auftritt. Die Annotation @ExceptionHandler(ApiException.class) zeigt an, dass diese Methode Ausnahmen dieses spezifischen Typs behandelt.

Erstellen einer benutzerdefinierten Ausnahme

Aber was genau ist die ApiException? Es handelt sich um eine benutzerdefinierte Ausnahme, die speziell für unsere API erstellt wurde. Wir können eigene Ausnahmen erstellen und diese in unserer REST-API verwenden.

Weitere Informationen zum Erstellen eigener benutzerdefinierter Ausnahmen finden Sie hier.

ApiException.java

ApiException.java

copy
12345678910111213141516
public class ApiException extends RuntimeException { // HTTP status code associated with this exception private final HttpStatus httpStatus; // Constructor to initialize the exception with a message and an HTTP status public ApiException(String message, HttpStatus httpStatus) { super(message); this.httpStatus = httpStatus; } // Getter method to retrieve the HTTP status public HttpStatus getHttpStatus() { return httpStatus; } }

Dieser Code definiert die Klasse ApiException, die RuntimeException erweitert und ein zusätzliches Feld httpStatus zur Speicherung des HTTP-Status enthält. Der Konstruktor der Klasse nimmt eine Nachricht und einen HTTP-Status entgegen, die dann an den Basiskonstruktor übergeben und im Feld httpStatus gespeichert werden.

Danach kann eine Ausnahme aus unserer Anwendung ausgelöst werden:

Main.java

Main.java

copy
1234567891011
public BookResponseDTO updateBook(String id, BookRequestDTO book) { Book modelBook = MapperBook.dtoRequestToModel(book); Book repositoryBook = bookRepository.updateBook(id, modelBook); // If the book was not found in the repository, throw an ApiException with a NOT_FOUND status if (repositoryBook == null) { throw new ApiException("Not found book by id: " + id, HttpStatus.NOT_FOUND); } return MapperBook.modelToResponseDto(repositoryBook); }

Dieser Ausnahmetyp wird von einer Methode handleException(ApiException ex) abgefangen, die speziell für die Behandlung dieser Ausnahme vorgesehen ist. Innerhalb dieser Methode kann die Logik zur Verwaltung der Ausnahme definiert werden.

Die gewünschte Logik besteht darin, Ausnahmen im Zusammenhang mit der API abzufangen und eine strukturierte Antwort mit Fehlerinformationen sowie dem entsprechenden HTTP-Status zurückzugeben.

Main.java

Main.java

copy
123456789
@ExceptionHandler(ApiException.class) public ResponseEntity<?> handleException(ApiException ex) { return new ResponseEntity<>(ErrorResponse .builder() .error(ex.getMessage()) .build(), ex.getHttpStatus() ); }

Dieser Code behandelt die ApiException, indem eine ResponseEntity mit Fehlerinformationen erstellt wird. Die Methode handleException() konstruiert ein Objekt vom Typ ErrorResponse mit der Nachricht aus der Exception und setzt den HTTP-Status aus dem Feld httpStatus der Exception. Dieses wird an den Client zurückgegeben.

Das Feld httpStatus wurde initialisiert, als die Exception in der Anwendung ausgelöst wurde.

ErrorResponse ist eine Klasse, die Informationen über den Fehler bereitstellt. Sie enthält ein Feld error, das die Fehlerbeschreibung anzeigt und mit den Annotationen @Data und @Builder erstellt wird.

ErrorResponse.java

ErrorResponse.java

copy
12345
@Data @Builder public class ErrorResponse { private String error; }

Die Annotation @Builder von Lombok vereinfacht die Objekterstellung durch die Implementierung des Builder-Musters. Sie ermöglicht eine besser lesbare und wartbare Art, Objekte zu erstellen, insbesondere solche mit vielen Parametern. Zum Beispiel kann eine Instanz von ErrorResponse wie folgt erstellt werden:

ErrorResponse.builder().error("ERROR").build();

Die Methode builder() initialisiert einen neuen Builder für die Klasse ErrorResponse. Die Methode error("ERROR") setzt das Feld error auf "ERROR" und die Methode build() erstellt das endgültige ErrorResponse-Objekt mit dem angegebenen Wert.

Fehlerbehandlung in unserer Anwendung

Zusammenfassung

Exception Handling in einer REST-API zentralisiert das Fehlermanagement, indem es ein einheitliches Antwortformat für den Client bereitstellt. Dies vereinfacht das Verständnis und die Behandlung von Fehlern, da Clients klare und strukturierte Meldungen erhalten.

Der Einsatz der Annotationen @ControllerAdvice und @ExceptionHandler ermöglicht die Anpassung der Behandlung verschiedener Ausnahmen, während benutzerdefinierte Ausnahmen zusätzliche Informationen wie den HTTP-Status enthalten können.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 5
some-alt