...
Cambiar el modelo de respuesta implica que, si no se usa otro mecanismo, el nuevo modelo será devuelto en todas las situaciones de error.
Ejemplo de fichero extendido:
...
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á
Como resumen de lo expuesto en esta página podemos hacer el siguiente listado de casos de uso:
- Si queremos devolver un status code HTTP concreto y un mensaje, sin importar el formato del JSON devuelto (modelo de respuesta) => Usar ResponseStatusException (punto 1).
- Si queremos modificar el modelo de respuesta de forma global => Crear una clase que extienda DefaultErrorAttributes (punto 2).
- Si queremos manejar una excepción de forma local en nuestro controlador REST y cambiar la respuesta para esa única excepción => Crear un método con ExceptionHandler (punto 3).
- Si queremos manejar todas nuestras excepciones de forma global => Crear una clase con RestControllerAdvice e incluir en ella nuestros handlers (punto 4).
- Si queremos modificar el manejo de las excepciones internas que realiza Spring => Crear una clase RestControllerAdvice que extienda ResponseEntityExceptionHandler (punto 5).
- Si usamos Bean Validation y queremos modificar la respuesta o el modelo devuelto por Spring => Crear un ExceptionHandler para javax.validation.ValidationException (punto 6).
| Info |
|---|
Próximamente estará disponible la integración con el RFC Problem, por lo que no se recomienda |
...
elaborar muchos modelos |
...
de respuesta propios. Estará disponible un modelo de respuesta común para las aplicaciones FundeWebJS y se indicará cómo manejar las excepciones de forma más ágil. |
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://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.html
- 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
...