¿Hay alguna forma de que cuando la request manda algun dato erroneo (nombre en blanco, sin email, etc) el cuerpo de nuestra respuesta sea diferente al default? Algo que describa un poco mas facilmente el error?
¿Hay alguna forma de que cuando la request manda algun dato erroneo (nombre en blanco, sin email, etc) el cuerpo de nuestra respuesta sea diferente al default? Algo que describa un poco mas facilmente el error?
¡Hola José! Espero que estés bien.
Cuando ocurre un error de validación en una solicitud puedes lograr esto utilizando la anotación @ExceptionHandler
para manejar excepciones personalizadas.
Aquí tienes un ejemplo:
@ControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorResponse handleValidationException(MethodArgumentNotValidException ex) {
List<String> errors = ex.getBindingResult()
.getFieldErrors()
.stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
return new ErrorResponse("Error de validación", errors);
}
}
En este ejemplo, MethodArgumentNotValidException
es la excepción que se lanza cuando ocurre un error de validación en una solicitud. El método handleValidationException
se encarga de manejar esta excepción y devuelve una respuesta personalizada con un mensaje de error y una lista de errores específicos de cada campo.
Pero puedes personalizar la clase ErrorResponse
según tus necesidades:
public class ErrorResponse {
private String message;
private List<String> errors;
// constructor, getters y setters
}
Al lanzar la excepción MethodArgumentNotValidException
, Spring Boot llamará automáticamente al método handleValidationException
y devolverá la respuesta personalizada en el cuerpo de la respuesta.
Además hay varias formas de trabajar con la gestión de errores.
Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.
¡Vamos juntos!