Fermer

octobre 7, 2023

Gestion exceptionnelle personnalisée à l’aide de ControllerAdvice

Gestion exceptionnelle personnalisée à l’aide de ControllerAdvice


Ici, nous pouvons voir dans l’image ci-dessus que le produit n’est pas présent pour cet ID de produit. Mais nous obtenons un véritable statut 200. ce qui n’est pas une réponse compréhensible.

Comprenons pourquoi nous avons besoin d’une remise personnalisée exceptionnelle

En utilisant @ControllerAdvice in Spring vous permet de créer un gestionnaire d’exceptions centralisé capable de gérer les exceptions levées par les contrôleurs de votre application. Il s’agit d’une fonctionnalité puissante pour la gestion personnalisée des exceptions. Voici un guide étape par étape sur la façon d’implémenter la gestion personnalisée des exceptions à l’aide de @ControllerAdvice au printemps:

Étape 1 : Créer des classes d’exception personnalisées

Créez des classes d’exception personnalisées qui étendent RuntimeException Ou une classe d’exception de base appropriée. Par exemple:

public class ProductNotFoundException extends RuntimeException {
    public ProductNotFoundException(String message) {
        super(message);
    }
}
public class InvalidRequestException extends RuntimeException {
    public InvalidRequestException(String message) {
        super(message);
    }
}

Vous pouvez créer autant de classes d’exceptions personnalisées que nécessaire pour différents scénarios d’erreur.

Étape 2 : Créer un gestionnaire d’exceptions global

Créez une classe de gestionnaire d’exceptions globale annotée avec @ControllerAdvice. Cette classe contiendra des méthodes pour gérer diverses exceptions.

Voici un exemple :

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ProductNotFoundException.class)
    public ResponseEntity<String> handleProductNotFoundException(ProductNotFoundException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(InvalidRequestException.class)
    public ResponseEntity<String> handleInvalidRequestException(InvalidRequestException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleOtherExceptions(Exception ex) {
        return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Dans cet exemple, nous avons créé trois méthodes de gestion des exceptions : une pour gérer ProductNotFoundExceptionun pour la manipulation InvalidRequestException, et un autre pour gérer les exceptions générales. Ces méthodes renvoient les statuts de réponse HTTP et les messages d’erreur appropriés.

Étape 3 : lancer des exceptions personnalisées dans vos contrôleurs

Dans vos méthodes de contrôleur, lancez des exceptions personnalisées si nécessaire. Par exemple:

@RestController
@RequestMapping("/api/products")
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable Long id) {
        Product product = productService.getProductById(id);
        if (product == null) {
            throw new ProductNotFoundException("Product not found with ID: " + id);
        }
        return ResponseEntity.ok(product);
    }

    @PostMapping
    public ResponseEntity<String> createProduct(@RequestBody Product product) {
        if (product == null) {
            throw new InvalidRequestException("Invalid product request");
        }
        productService.createProduct(product);
        return ResponseEntity.status(HttpStatus.CREATED).body("Product created successfully");
    }
    
}

Dans cet exemple, lorsqu’un produit n’est pas trouvé (getProductById) ou une demande invalide est effectuée (createProduct), nous lançons des exceptions personnalisées (ProductNotFoundException et InvalidRequestException).

Étape 4 : tester la gestion des exceptions

Désormais, lorsque vous accédez à vos points de terminaison RESTful et qu’une exception est levée, le gestionnaire d’exception global intercepte l’exception et renvoie l’état HTTP et le message d’erreur appropriés.

Par exemple, si vous faites une requête GET à /api/products/123et qu’un produit avec l’ID 123 n’est pas trouvé, la réponse aura un code d’état de 404 (NON TROUVÉ) et un message d’erreur du type « Produit introuvable avec l’ID : 123 ».

En suivant ces étapes, vous avez ajouté une gestion personnalisée des exceptions à l’aide de @ControllerAdvice dans votre application Spring Boot, vous permettant de gérer des exceptions spécifiques avec élégance et de fournir des réponses d’erreur significatives aux clients.

Une fois ce problème résolu, nous obtiendrons une réponse appropriée. Vous pouvez consulter le code ici sur github.

Vous pouvez commenter ci-dessous ou m’envoyer vos questions par courrier électronique.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link