Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Gestion des Exceptions | API RESTful
Backend Spring Boot
course content

Contenu du cours

Backend Spring Boot

Backend Spring Boot

1. Notions de Base du Développement Backend
2. Notions de Base de Spring Boot
3. API RESTful
4. Travailler avec des Bases de Données
5. Tester les Applications Backend

book
Gestion des Exceptions

La gestion des exceptions dans une API REST utilisant Spring Boot est un aspect crucial du développement qui permet une gestion efficace des erreurs et informe les clients des problèmes qui se sont produits sur le serveur. Examinons ce processus plus en détail.

Comment cela aide-t-il à notifier le client des erreurs ?

La gestion des erreurs dans une API REST aide à standardiser le format des réponses d'erreur, ce qui facilite le travail des clients avec les réponses. Cela, à son tour, les informe des raisons des erreurs, permettant aux clients de comprendre ce qui s'est mal passé et comment corriger le problème.

De plus, une telle gestion permet de différencier les types d'erreurs, comme les erreurs de validation ou les problèmes d'accès, rendant les messages d'erreur plus précis et utiles.

Mise en œuvre de la gestion des exceptions à l'aide d'annotations

Spring Boot fournit plusieurs outils pour la gestion des exceptions. Les principaux sont les annotations @ControllerAdvice et @ExceptionHandler.

L'annotation @ControllerAdvice vous permet de définir des gestionnaires d'exceptions globales pour tous les contrôleurs de l'application, ce qui aide à centraliser la gestion des erreurs et à éviter la duplication de code.

Dans une classe annotée avec @ControllerAdvice, les méthodes annotées avec @ExceptionHandler spécifient quels types d'exceptions une méthode particulière doit gérer. Cela simplifie la gestion des erreurs et rend le code plus propre et mieux organisé.

java

GlobalExceptionHandler

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

Dans cette classe, la méthode handleException() sera invoquée lorsqu'une exception de type ApiException se produit dans l'application. L'annotation @ExceptionHandler(ApiException.class) indique que cette méthode gère les exceptions de ce type spécifique.

Création d'une Exception Personnalisée

Mais qu'est-ce que l'ApiException exactement ? C'est une exception personnalisée créée spécifiquement pour notre API, et nous pouvons créer nos propres exceptions et les utiliser dans notre API REST.

Vous pouvez apprendre à créer vos propres exceptions personnalisées ici.

java

ApiException

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

Ce code définit la classe ApiException, qui étend RuntimeException et inclut un champ supplémentaire httpStatus pour stocker le statut HTTP. Le constructeur de la classe prend un message et un statut HTTP, qui sont ensuite passés au constructeur de base et stockés dans le champ httpStatus.

Après cela, nous pouvons lancer une exception depuis notre application :

java

Main

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

Ce type d'exception sera capturé par une méthode handleException(ApiException ex) conçue pour la gérer, et au sein de cette méthode, nous pouvons définir la logique pour gérer l'exception.

La logique que nous voulons implémenter est de capturer les exceptions liées à l'API et de retourner une réponse structurée contenant des informations sur l'erreur ainsi que le statut HTTP approprié.

java

Main

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

Ce code gère l'ApiException en créant un ResponseEntity avec des informations d'erreur. La méthode handleException() construit un objet ErrorResponse avec le message de l'exception et définit le statut HTTP à partir du champ httpStatus de l'exception, le renvoyant au client.

Nous avons initialisé le champ httpStatus lorsque nous lançons l'exception dans notre application.

ErrorResponse est une classe utilisée pour fournir des informations sur l'erreur. Elle contient un champ error qui affiche la description de l'erreur et est créée à l'aide des annotations @Data et @Builder.

java

ErrorResponse

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

L'annotation @Builder de Lombok simplifie la création d'objets en implémentant le modèle Builder. Elle permet une manière plus lisible et maintenable de construire des objets, en particulier ceux avec de nombreux paramètres. Par exemple, vous pouvez créer une instance ErrorResponse comme ceci :

La méthode builder() initialise un nouveau builder pour la classe ErrorResponse. La méthode error("ERROR") définit le champ error à "ERROR", et la méthode build() construit l'objet ErrorResponse final avec la valeur spécifiée.

Gestion des erreurs dans notre application

Résumé

La gestion des exceptions dans une API REST centralise la gestion des erreurs en fournissant un format de réponse cohérent pour le client. Cela simplifie la compréhension et la gestion des erreurs, car les clients reçoivent des messages clairs et structurés.

L'utilisation des annotations @ControllerAdvice et @ExceptionHandler permet la personnalisation de la manière dont différentes exceptions sont gérées, tandis que les exceptions personnalisées peuvent inclure des informations supplémentaires, telles que le statut HTTP.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt