...
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/5
Respuesta:
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 language java theme Eclipse title Ejemplo declaración y uso @ResponseStatus ... @ResponseStatus( code = HttpStatus.BAD_REQUEST, reason = "Reason en ResponseStatus", value = HttpStatus.INTERNAL_SERVER_ERROR ) public class TestResponseStatusException extends RuntimeException ..../ } catch ( final TestResponseStatusException e1 ) { log.error( "Test de prueba de notación @ResponseStatus con custom FundeWebJSErrorAttributtes: {}", e1.getMessage() ); throw e1; } ...Bloque de código title Request con @ResponseStatus https://fundewebjsshowcasedesa.um.es/api/v1.0/public/handleError/1
Bloque 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.
...