¿Qué papel tiene @ControllerAdvice con @ExceptionHandler?
Opciones
- Autentica a los usuarios antes de cada llamada al controlador
- Centraliza el manejo de excepciones y las respuestas de error HTTP (Opción correcta)
- Programa tareas para que se ejecuten a horas fijas del día
- 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.