Manejo de Excepciones en SpringMVC

0
8288

En este tutorial explicaremos como gestionar excepciones y manejar estados de respuesta http, de una manera rápida y sencilla, en controladores de Spring MVC.

Índice de contenidos

1. Introducción

Spring ofrece, entre sus muchos proyectos disponibles, el framework Web MVC, diseñado alrededor del concepto de DispatchtServlet que reparte las distintas peticiones entre los manejadores existentes.
Ya en el pasado hemos visto como hacer uso de esta tecnología (como se puede ver en algunos de los tutoriales existentes… ).
En esta ocasión veremos como, con unas pocas instrucciones, somos capaces de manejar excepciones y asignarle una respuesta acorde, con esta tecnología.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: MacBook Pro 17′ (2.66 GHz Intel Core i7, 8GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Lion 10.10.3.
  • NVIDIA GeForce GT 330M 512Mb.
  • Crucial MX100 SSD 512 Gb.
  • Eclipse Mars (4.5.0).
  • Spring Framework v4.2.1.RELEASE

    • spring-core
    • spring-web
    • spring-webmvc

3. Anotación @ExceptionHandler

La anotación @ExceptionHandler se encarga de anotar un método como el encargado de realizar acciones en caso de que se lance una excepción.

En el ejemplo anterior se muestra como hacer uso de esta anotación. Tan solo es necesario tomar el método que se va a encargar de responder en caso de error y anotarlo, estableciendo como parámetro de la anotación la excepción de la que se va a hacer responsable.

Esta anotación solo actua a nivel de métodos, y tiene un nivel de retención RUNTIME lo que hace que sólo se pueda acceder a ella en dicho espacio de tiempo.

4. Anotación @ResponseStatus

La anotación @ResponseStatus nos permite marcar un método o excepción con el código de estado http (code) y la razón (reason) que serán devueltos.

Como podemos ver en el ejemplo anterior, se ha establecido que el método getInfo devuelva el codigo de respuesta OK, para ello Spring nos ofrece un enumerado HttpStatus con todos los posibles códigos http de retorno.

Esta anotación puede actuar sobre tipos y métodos, y tiene un nivel de retención RUNTIME lo que hace que sólo se pueda acceder a ella en dicho espacio de tiempo.

De manera adicional, como hemos visto en el comienzo de este punto, la anotación Status permite establecer la razón del código de vuelto. Este valor es un string que puede pasarse como segundo parámetro como podemos ver en el siguiente ejemplo, una versión ampliada del anterior:

5. Ejemplo completo

A continuación presentamos un ejemplo completo de una clase controladora con varios métodos manejadores de excepciones.

RestController.xml

En este ejemplo hemos establecido dos manejadores ( nullPointerHandler y numberFormatHandler) encargados de gestionar distintas excepciones y que, según sea el caso, devolveran un estado u otro.

En el caso de las excepciones de tipo NullPointerException hemos decidido devolver un código Not Found y dejar constancia en el log del problema.

En el caso de las excepciones de tipo NumberFormatException hemos decidido devolver un código Bad Request y, como en el caso anterior, dejar constancia en el log del problema.

6. Conclusiones

Como hemos visto, podemos realizar una gestión de excepciones y un manejo de respuestas http de una manera muy sencilla y con un código muy fácil de entender a simple vista gracias a las anotaciones @ErrorHandling y @ResponseStatus que nos ofrece Spring Framework.

7. Referencias

Dejar respuesta

Please enter your comment!
Please enter your name here