通过HandlerExceptionResolver处理异常,包括Handler映射、数据绑定及目标方法执行时发生的异常。
主要处理Handler中用@ExceptionHandler注解定义的方法。
/**
* 1.在@handlerArithmeticException方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象
* 2.@handlerArithmeticException方法的入参中不能传入map,若希望把异常信息传到页面上,需要使用ModelAndView作为返回值
* 3.@handlerArithmeticException方法标记的异常有优先级问题,匹配度较高的方法优先级较高:
* 如下:当i=0时,10/i发生ArithmeticException异常,
* 若有@ExceptionHandler(ArithmeticException.class)与@ExceptionHandler(RunTimeException.class)两个方法,
* 则优先调用@ExceptionHandler(ArithmeticException.class)方法。
* 4.@ControllerAdvice:
* 如果在当前Handler中找不到@ExceptionHandler标记的方法处理当前方法出现的异常,
* 则将去@ControllerAdvice标记的类中查找@ExceptionHandler标记的方法处理异常。
*/
@ExceptionHandler(ArithmeticException.class)
public ModelAndView handlerArithmeticException(Exception ex) {
System.out.println("发生异常:" + ex);
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception",ex);
return mv;
}
@RequestMapping("/testExceptionHandlerExceptionResolver")
public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i) {
System.out.println("result:" + (10/i));
return "success";
}