Spring Boot : comment gérer proprement les exceptions dans une API REST ?

posée 5 months ago122 vuesfr

5

Mes contrôleurs ont des try/catch partout qui renvoient des ResponseEntity différents. Comment centraliser ?

Environnement :Spring Boot 3.3Java 21

Diagnostic IA

Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.

posée 5 months ago

1 réponse

4
✓
✓ Réponse acceptée

Utilise un @RestControllerAdvice avec des @ExceptionHandler, et le format standard ProblemDetail (RFC 9457) intégré à Spring 6 :

@RestControllerAdvice
public class ApiExceptionHandler {

  @ExceptionHandler(ResourceNotFoundException.class)
  ProblemDetail notFound(ResourceNotFoundException ex) {
    ProblemDetail pd = ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, ex.getMessage());
    pd.setTitle("Ressource introuvable");
    return pd;
  }

  @ExceptionHandler(MethodArgumentNotValidException.class)
  ProblemDetail invalid(MethodArgumentNotValidException ex) {
    ProblemDetail pd = ProblemDetail.forStatus(HttpStatus.BAD_REQUEST);
    pd.setProperty("errors", ex.getBindingResult().getFieldErrors().stream()
        .map(e -> Map.of("field", e.getField(), "message", e.getDefaultMessage())).toList());
    return pd;
  }
}

Active aussi spring.mvc.problemdetails.enabled=true pour que les erreurs internes de Spring suivent le même format. Tes contrôleurs se contentent alors de throw new ResourceNotFoundException(...).

Connectez-vous pour dire si ça a marché.

answered 5 months ago

Sign in and verify your email to post an answer.