...
ResponseStatusException => Devolver modelo de respuesta estándar de forma rápida y correcta .
DefaultErrorAttributes => Modificar el modelo de respuesta de forma global.
ExceptionHandler => Manejar localmente una excepción propia y 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.
[EXTRA] Bean Validation => Modificar la respuesta si se usa para validar parámetros.
ResponseStatusException
...
Útil para devolver un error de forma correcta y rápida, sin preocuparnos de los datos devueltos.
Se construye la excepción pasándole el status code HTTP de error deseado y Spring Boot la captura y maneja de forma automática.
Devuelve el modelo de respuesta estándar (ver siguiente apartado).
Ventajas: rápido,
...
status code parametrizable.
Desventajas: Modelo de respuesta fijo
...
.
Ejemplo:
Bloque de código language java theme Eclipse title Ejemplo de uso de ResponseStatusException ..... } catch ( final TestException e2 ) { //Se captura una excepción existente y se lanza una nueva ResponseStatusException log.error( "Test de prueba de ResponseStatusException con custom FundeWebJSErrorAttributtes: {}",e2.getMessage() ); throw new ResponseStatusException( HttpStatus.INTERNAL_SERVER_ERROR, e2.getMessage(),e2.getCause() ); } ....Fuente: Rest handleError (https://gitlab.um.es/mncs/fundewebjsshowcase-api/-/blob/desarrollo/src/main/java/es/um/atica/fundewebjsshowcasebackend/services/rest/impl/RestTestImpl.java).
Petición:Bloque de código language xml title Request ResponseStatusException https://fundewebjsshowcasedesa.um.es/api/v1.0/public/handleError/5Respuesta:
Bloque de código language json title Response ResponseStatusException { "fecha": "05/10/2021 10:31:27", "estado": "INTERNAL_SERVER_ERROR", "mensaje": "2. ResponseStatusException con FundeWebJSErrorAttributtes", "tipoRespuesta": "CUSTOM_DefaultErrorAttributes" }1.1 ResponseStatus:
La excepción ResponseStatusException es una evolución de otro mecanismo, la notación @ResponseStatus .
Por comodidad se recomienda usar ResponseStatusException, pero es posible seguir usando esta notación declarándola nuestras excepciones y lanzándolas desde nuestra API REST directamente.
Ver: Ejemplo ResponseStatus (https://gitlab.um.es/mncs/fundewebjsshowcase-api/-/blob/desarrollo/src/main/java/es/um/atica/fundewebjsshowcasebackend/exceptions/TestResponseStatusException.java).
Ejemplo ejecución:Bloque de código title Request con @ResponseStatus https://fundewebjsshowcasedesa.um.es/api/v1.0/public/handleError/1Bloque de código language json title Respuesta con @ResponseStatus { "fecha": "05/10/2021 10:45:25", "estado": "BAD_REQUEST", "mensaje": "1. Notación ResponseStatus con FundeWebJSErrorAttributtes", "tipoRespuesta": "CUSTOM_DefaultErrorAttributes" }
...
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.
...