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

Donde puedo consultar mas acerca de esta gestión de errores?

package med.voll.api.infra.exceptions;

import jakarta.persistence.EntityNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GestorDeErrores {

    @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity getionarError404() {
        return ResponseEntity.notFound().build();
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity getionarError400(MethodArgumentNotValidException ex) {
        var errores = ex.getFieldErrors();
        return ResponseEntity.badRequest().body(errores.stream().map(DatosErrorValidacion::new).toList());
    }
    
   @ExceptionHandler(HttpMessageNotReadableException.class)
    public ResponseEntity gestionarError400(HttpMessageNotReadableException ex) {
        return ResponseEntity.badRequest().body(ex.getMessage());
    }

    @ExceptionHandler(BadCredentialsException.class)
    public ResponseEntity gestionarErrorBadCredentials() {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Credenciales inválidas");
    }

    @ExceptionHandler(AuthenticationException.class)
    public ResponseEntity gestionarErrorAuthentication() {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Falla en la autenticación");
    }

    @ExceptionHandler(AccessDeniedException.class)
    public ResponseEntity gestionarErrorAccesoDenegado() {
        return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Acceso denegado");
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity gestionarError500(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " +ex.getLocalizedMessage());
    }

    public record DatosErrorValidacion(String campo, String mensaje) {
        public DatosErrorValidacion(FieldError error){
            this(error.getField(), error.getDefaultMessage());
        }
    }
}
1 respuesta

Hola Edwin,

¡Qué bueno que estás interesado en profundizar en la gestión de errores en Spring Boot! La clase GestorDeErrores que compartiste es un excelente punto de partida para manejar errores comunes en una API REST. Para aprender más sobre este tema, te recomiendo explorar las siguientes áreas:

  1. Documentación Oficial de Spring Boot: La documentación de Spring Boot es un recurso valioso y contiene secciones específicas sobre el manejo de excepciones. Puedes encontrarla en spring.io.

  2. Artículos y Blogs: Hay muchos desarrolladores que comparten sus experiencias y mejores prácticas en blogs y artículos. Sitios como Medium, Baeldung, y DZone tienen artículos detallados sobre el manejo de excepciones en Spring Boot.

  3. Libros y Cursos: Considera leer libros sobre Spring Boot que cubran temas avanzados, incluyendo el manejo de errores. También puedes buscar cursos en plataformas como Udemy o Coursera que ofrezcan contenido más profundo.

  4. Comunidades y Foros: Participar en comunidades como Stack Overflow o los foros de Spring puede ser útil para discutir con otros desarrolladores y aprender de sus experiencias.

  5. Ejemplos Prácticos: Implementar y experimentar con diferentes tipos de excepciones y su manejo en proyectos pequeños puede ser muy educativo. Intenta simular diferentes errores y observa cómo puedes manejarlos de manera efectiva.

Espero que estas sugerencias te sean útiles para seguir aprendiendo sobre la gestión de errores en Spring Boot. ¡Espero haber ayudado y buenos estudios!