...
A continuación se va a explicar estos mecanismos desde el enfoque de los casos de uso más habituales:
ResponseStatusException => Devolver modelo de respuesta estándar de forma rápida y correcta .
DefaultErrorAttributes => Modificar el modelo de respuesta de forma global.
- Tengo
ExceptionHandler => Manejar localmente una excepción propia y
quiero manejarla localmente en mi controlador para no crear más clases (con modelo estándar o con modelo propio). Tengo una paquete de excepciones y las quiero manejar todas de forma global a toda la aplicación (con modelo estándar o con modelo propio).
devolver el modelo de respuesta estándar o un modelo propio.
ControllerAdvice => Manejar de forma global todas mis excepciones y devolver el modelo de respuesta estándar o un modelo propio.
ControllerAdvice + ResponseEntityExceptionHandler => Modificar el comportamiento y el modelo de respuesta para excepciones internas capturadas por Spring Boot
No quiero un modelo de respuesta global, pero quiero modificar el que genera Spring para excepciones internas no controladas.
[EXTRA]
Si usoBean Validation => Modificar la respuesta si se usa para validar
los parámetros, ¿cómo afecta?ResponseStatusException
DefaultErrorAttributes
ExceptionHandler
ControllerAdviceControllerAdvice + ResponseEntityExceptionHandler
...
parámetros.
ResponseStatusException
Permite lanzar una excepción pasando como parámetro un código de respuesta.
Devuelve el modelo de respuesta estándar.
Ventajas: rápido, código http distinto con cada
Desventajas: Modelo de respuesta fijo
Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.
(Hablar de ResponseStatus y mencionar el otro ejemplo)
DefaultErrorAttributes
Definición del modelo de respuesta estándar.
Se puede modificar y declarar para configurar un modelo de respuesta común para toda la aplicación.Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.ExceptionHandler
Manejar excepciones de forma local, permite modificar valores de la respuesta http así como el modelo.
Desventajas: solo funciona de forma local.
Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.
ControllerAdvice
Permite centralizar el manejo de excepciones para que se capturen de forma global.
Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.
ControllerAdvice + ResponseEntityExceptionHandler
Permite extender y sobreescribir el manejo de las excepciones internas que realiza Spring Boot de forma automática.
Poner listado de excepciones.
Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.Bean Validation
Configuración y uso de Bean Validation.
Handlers a sobreescribir para modificar respuesta HTTP o modelo.
Poner código de servicio y enlaces a gitlab.
Poner petición y respuesta ejemplo de postman.
| Info |
|---|
...
Conclusión
Enumerar conclusiones, si se quiere hacer rápido usar ResponseStatusException, si se quiere cambiar la respuesta o el modelo y tenemos muchas excepciones usar ControllerAdvice + ResponseEntityExceptionHandler.
En un futuro cercano se integrará con el RFC Problem, se recomienda no elaborar muchos modelos de respuesta ya que posiblemente deban extender Problem.
Bean Validation
...
...
Artículos Relacionados
- https://wiki.um.es/wikis/programador/doku.php?id=fdw2.0:fundeweb2.0:gt:rest:manejo_errores_rest
- https://www.baeldung.com/spring-response-status-exception
- https://www.baeldung.com/exception-handling-for-rest-with-spring
- https://www.baeldung.com/problem-spring-web
- https://wiki.um.es/wikis/programador/doku.php?id=fdw2.0:fundeweb2.0:gt:rest:guia_validacion_servicio_rest
...