@ExceptionHandler(value={ArithmeticException.class}) public ModelAndView ex1(Exception ex){ ModelAndView mv=new ModelAndView(); mv.setViewName("error"); mv.addObject("ex", ex); return mv; }
在出现异常的类中添加异常的方法。
一、注解的时候不在使用@RequestMapping(),而是使用@ExceptionHandler()进行注解。
@ExceptionHandler()的参数是:
value= { ArithmeticException.class},是一个数组,可以添加多个异常的说明
二、这时候如果想向前天传递参数就不能在方法的参数中使用Map,而是改用
ModelAndView。
三。如果在本类中写了多个异常的方法,比如写了
@ExceptionHandler(value={Exception.class}) public ModelAndView ex2(Exception ex){ ModelAndView mv=new ModelAndView(); System.out.println(ex); mv.setViewName("error"); mv.addObject("ex", ex); return mv; } @ExceptionHandler(value={ArithmeticException.class}) public ModelAndView ex1(Exception ex){ ModelAndView mv=new ModelAndView(); System.out.println(ex); mv.setViewName("error"); mv.addObject("ex", ex); return mv; }
这时如果出现了ArithmeticException异常,会执行最接近异常的异常方法,也就是会执行ex1的
异常方法。
三、全局异常处理
如果想定义一个监视所有类的异常的方法
再创建一个类,类的上方不再是@Controller注解,而是使用@ControllerAdvice进行注解,
然后写一个异常的方法 ,用@ExceptionHandler进行注解。
@ControllerAdvice public class Exception1 { @ExceptionHandler(value={ArithmeticException.class}) public ModelAndView ex1(Exception ex){ ModelAndView mv=new ModelAndView(); mv.setViewName("error"); mv.addObject("ex", ex); return mv; } }