Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Añadiendo un @ControllerAdvice. Aclarando mensajes de error

Otro tema que, normalmente, dejamos con desarrollos incompletos, es la comunicacion de los errores.

Estoy de acuerdo que en explotación, no se deben ver los errores, pero, aun así, hay dos motivos para que nos preocupemos de cómo aparecen estos: primero es que durante el desarrollo, nos ahorraría mucho tiempo el ver lo que necesitamos para corregir la incidencia, y, el segundo es que en explotación, necesitamos facilitar información cuando recibimos un campo con datos erróneos…

Nuestro problema con errores 500

Si nuestro aplicativo comete un error 500, nuestra salida será algo como

y, reconoce que bonito no es, y que no nos ayuda demasiado, y… ¿que podemos hacer?

Yo os propongo que hagáis algo para conseguir esto

¿os he interesado?, pues sigamos leyendo

El @ControllerAdvice

Si queremos editar el mensaje de error y hacerlo las inteligible, necesitamos capturar el error, y luego interpretarlo.

Spring nos ofrece la anotación @ControllerAdvice que solo tenemos que anteponer a una clase, para que podamos utilizarla para la captura de errores; a continuación, nuestra primera visión. Si estamos trabajando para una API, puede que nos interese mas el utilizar la anotacion @RestControllerAdvice.

La definición del controlador

A nosotros nos interesan los errores que pasan por clases nuestras, no nos aporta nada ver que un error pasa por cualquier clase que no controlamos, por lo que lo primero que necesitamos es reconocer nuestras clases, y, eso lo podamos hacer gracias a los package. En mi caso, todo el aplicativo esta dentro del package «com.recursosformacion.lcs», por lo que facilitare su identificación

Debemos identificar también los errores que deseamos controlar, pensad que queremos extraer información, y que distintos errores pueden tener distinta información, y con distinta estructura.

Para determinar los errores que queremos interceptar, anteponemos al método la anotación @ExceptionHandler.

Este metodo no sera demasiado selectivo, y solo utilizara la estructura estandar de errores. Tambien, como he declarado ControllerAdvice, ahora, necesitare utilizar @ResponseBody, para que el mensaje salga hacia el cliente. Veamos el método

Y el método que es capaz de recorrer el mensaje para extraer las clases por las que va pasando, y analizarlas para ver si pertenecen a mi paquete o no, es:

Con eso, ya tenemos una version mejor de nuestro error 500. Queda a vuestra discreción si esta informacion de la haceis llegar al usuario, la grabais en un log, o la enviais por mail al equipo….

Comunicando errores del formulario

Otro tema distinto es cuando recibimos información errónea que el usuario puede corregir, en ese caso, debemos informar del error y de la posible solucion, pero, en los artículos precedentes, he estado abogando por filtros por anotación, que son muy útiles y claros para escribirlos, pero que dan la información del error, a través de una exception (MethodArgumentNotValidException.class)

Entonces, segun lo que vimos antes, solo debemos crear un @ControllerAdvice, y a continuación os propongo una posibilidad que, las aplicaciones de FrontEnd podrán manejar fácilmente.

En este caso, utilizare un @RestControllerAdvice y lo he dejado en otra clase, aunque podríamos haberlo hecho en la misma…quizás de cara a la reutilización, puede que sea mas clara la especialización

Este código, recogerá una excepción de tipo MethodArgumentNotValidException y formateara una salida que en formato JSON se veria asi:

Conclusión

Todo este desarrollo lo teneis explicado con mas detalle en youTube (a partir de1/02/24) , y, aunque es conveniente que intentéis escribirlo TODO vosotros, si queréis renunciar a ello, lo teneis tambien en GitHub

Este desarrollo esta hecho para disponer de un fuente para explicar otros temas, tal y como se indica en Visión de conjunto con Spring

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 34.204.169.230
Proxy: 34.204.169.230
Remote host: ec2-34-204-169-230.compute-1.amazonaws.com
Remote port: 57532
** 34.204.169.230, 172.70.38.128