这个是统一异常处理类, @ControllerAdvice这个注解声明的表示统一异常处理,@ExceptionHandler(value = Exception.class)这个注解写在方法上表示,该方法处理哪个异常.package com.buba.exceptionController; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; //捕捉工程所有异常 @ControllerAdvice public class GloableExceptionController { //拦截Exception类型异常 @ExceptionHandler(value = Exception.class) public ModelAndView defaultExceptionHandler(HttpServletRequest request,Exception ex){ ModelAndView modelAndView = new ModelAndView("defaultException"); //获取请求路径 modelAndView.addObject("url",request.getRequestURL()); //异常对象 modelAndView.addObject("ex",ex); //异常对象信息 modelAndView.addObject("message",ex.getMessage()); return modelAndView; } @ExceptionHandler(value = ArrayIndexOutOfBoundsException.class) public ModelAndView defaultExceptionHandler2(HttpServletRequest request,Exception ex){ ModelAndView modelAndView = new ModelAndView("defaultException2"); //获取请求路径 modelAndView.addObject("url",request.getRequestURL()); //异常对象 modelAndView.addObject("ex",ex); //异常对象信息 modelAndView.addObject("message",ex.getMessage()); return modelAndView; } } 这是两个异常页面,进行测试
我controller写了两个异常方法,第一个是ArrayIndexOutOfBoundsException这个异常,第二个是NullPointerException
当访问第二个异常的时候,因为在异常处理类中没有精确指明有空指针异常,所以会找它的父类,exception,所以出来的是第一个异常页面当访问第一个异常的时候,因为在异常处理类中有明确指定的这个异常,所以返回的是第二个页面
总结: 也就是说这个异常处理类中,可以获取所有的异常都拿excepion来接收,也可以明确指定哪个异常,跟上下顺序无关,有明确指定的异常会找明确指定的,没有就找父类. |
|
来自: jackeyqing > 《学习整理360doc》