ProblemDetail
es una clase introducida en Spring Boot 3 para representar respuestas de error en APIs REST de manera estandarizada. Sigue la especificación RFC 7807 (Problem Details for HTTP APIs), proporcionando información estructurada sobre los errores en formato JSON.
En Spring Boot, ProblemDetail
permite personalizar las respuestas de error en controladores REST. Se puede utilizar en combinación con @ExceptionHandler
para gestionar excepciones y devolver respuestas detalladas.
Para manejar excepciones personalizadas en un controlador, puedes definir un @ExceptionHandler
que devuelva un objeto ProblemDetail
:
import org.springframework.http.HttpStatus;
import org.springframework.http.ProblemDetail;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ProblemDetail handleRuntimeException(RuntimeException ex) {
ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, ex.getMessage());
problemDetail.setTitle("Error de ejecución");
return problemDetail;
}
}
1. @RestControllerAdvice
: Permite manejar excepciones globalmente en la aplicación.
2. @ExceptionHandler(RuntimeException.class)
: Captura excepciones del tipo RuntimeException
.
3. ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, ex.getMessage())
: Crea un objeto ProblemDetail
con el código de estado HTTP y el mensaje de error.
4. problemDetail.setTitle("Error de ejecución")
: Personaliza el título del error.
Cuando se lanza una excepción, la API devuelve una respuesta con el siguiente formato:
{
"type": "about:blank",
"title": "Error de ejecución",
"status": 400,
"detail": "Mensaje de error específico"
}
Jorge García
Fullstack developer