El control de excepciones podemos realizarlo de varias formas pero aquí indicaremos como realizarlo a nivel de clase y/o global. La forma de realizar el control será la misma lo que cambiará es el sitio donde se incluye para modificar su funcionamiento.
Veamos como hacer el control de la excepción. Creamos un método con la anotación ExceptionHandler y entre paréntesis la excepción que queremos capturar. Dentro del método podemos hacer diferentes tratamientos, en nuestro caso simplemente obtendremos el tipo de excepción y el usuario responsable. Estos datos podremos mostrarlos luego en la página de error.
@ExceptionHandler(ArithmeticException.class) public ModelAndView handleAException(final ArithmeticException ex) { ModelAndView modelAndView = new ModelAndView("error.page"); modelAndView.addObject("exception", ex.getClass().getSimpleName()); String name = SecurityContextHolder.getContext().getAuthentication().getName(); modelAndView.addObject("username", name); return modelAndView; }
Mostramos un ejemplo de página de error y como hacemos uso de las variables pasadas:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
Error de ${exception} producido por ${user}
El ejemplo esta hecho con Tiles, por lo tanto error.page debe estar configurado para que nos redirija a dicha página.
Ahora viene decidir que tratamiento queremos dar a el manejador de la excepción. Si quiere ser local o global. En el caso de que queramos darle un tratamiento local, debido a que va a ser un tipo de excepción que solo puede darse en un determinado Controlador, debemos incluir el método dentro de dicho Controlador. En caso de querer darle un tratamiento global, debemos incluirla en una clase que cuenten con la anotación 'ControllerAdvice', ejemplo:
@ControllerAdvice public class ExceptionController { protected final Logger logger = Logger.getLogger(getClass()); @ExceptionHandler(IOException.class) public ModelAndView handleIOException(final IOException ex) { logger.info("handleIOException - Catching: " + ex.getClass().getSimpleName()); ModelAndView modelAndView = new ModelAndView("error.page"); return modelAndView; } }
En el caso de que queráis saber algo más podéis verlo aqui, en la documentación oficial
No hay comentarios:
Publicar un comentario