Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos: RestControllerAdvice

En esta parte yo creé una clase anotada con @RestControllerAdvice para centralizar el manejo de excepciones de la API y evitar usar try-catch en cada controller.

Implementé métodos con @ExceptionHandler para:

  • Manejar EntityNotFoundException y devolver un 404 Not Found.
  • Manejar MethodArgumentNotValidException y devolver un 400 Bad Request con una lista personalizada de errores (campo y mensaje).
  • Estandarizar las respuestas de error usando ResponseEntity.

Además, dejé la API devolviendo mensajes claros y sin exponer información interna innecesaria, aplicando buenas prácticas en el manejo global de errores.

1 respuesta

¡Hola Estudiante, espero que estés bien!

Parece que has implementado correctamente el uso de @RestControllerAdvice para manejar excepciones de manera centralizada en tu API, lo cual es una excelente práctica. Esto no solo te ayuda a mantener tu código más limpio y organizado, sino que también mejora la experiencia del usuario al proporcionar respuestas de error consistentes y claras.

Por lo que describes, has cubierto los casos comunes de EntityNotFoundException y MethodArgumentNotValidException, lo cual es genial. Asegúrate de que tus métodos anotados con @ExceptionHandler estén bien definidos y que devuelvan instancias de ResponseEntity con el estado HTTP y el cuerpo adecuados.

Por ejemplo, para manejar EntityNotFoundException, podrías tener algo como:

@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<String> handleEntityNotFound(EntityNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}

Y para MethodArgumentNotValidException, podrías construir una respuesta más detallada:

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<List<String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
    List<String> errors = ex.getBindingResult()
                            .getFieldErrors()
                            .stream()
                            .map(error -> error.getField() + ": " + error.getDefaultMessage())
                            .collect(Collectors.toList());
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
}

Esto debería ayudarte a mantener la API robusta y amigable. Espero que tu implementación haya ido bien y que continúes aplicando estas buenas prácticas en tus proyectos.

Espero haber ayudado y buenos estudios!