Repaso
English
Spring, JPA y Java WebIntermedioSPR-21

¿Qué papel tiene @ControllerAdvice con @ExceptionHandler?

Opciones

  1. Autentica a los usuarios antes de cada llamada al controlador
  2. Centraliza el manejo de excepciones y las respuestas de error HTTP (Opción correcta)
  3. Programa tareas para que se ejecuten a horas fijas del día
  4. Registra cada sentencia SQL que ejecuta la app

Respuesta

Centraliza el manejo de excepciones de todos los controladores y las convierte en respuestas de error HTTP coherentes

Por qué

Sin esto, una excepción no capturada en un controlador se convierte en un error 500 genérico. Con @RestControllerAdvice escribes una clase que captura las excepciones de todos los controladores y devuelve un cuerpo JSON limpio con el código de estado correcto (404 para "no encontrado", 400 para validación, 409 para conflictos...).

Mantiene los controladores sin try/catch y da a los clientes un formato de error predecible.

@RestControllerAdvice
public class ApiErrors {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<Map<String, String>> notFound(UserNotFoundException e) {
        return ResponseEntity.status(404).body(Map.of("error", e.getMessage()));
    }
}

Recuerda

Una clase @RestControllerAdvice = respuestas de error coherentes.

Términos clave

Practica esta pregunta en Repaso