单个控制器异常处理
// 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类@ExceptionHandler({java.lang.NullPointerException.class,java.lang.ArithmeticException.class})public String exceptionHandle1(Exception ex, Model model){// 向模型中添加异常对象model.addAttribute("msg",ex);// 跳转到异常页面return "error";}// 方法一不能处理的异常交给方法二处理@ExceptionHandler(java.lang.Exception.class)public String exceptionHandle2(Exception ex, Model model){model.addAttribute("msg",ex);return "error2";}
全局异常处理
// 全局异常处理器类,需要添加@ControllerAdvice@ControllerAdvicepublic class GlobalExceptionHandler {/*** 异常处理方法** @param ex 异常对象* @param model 模型对象* @return*/// 添加@ExceptionHandler,表示该方法是处理异常的方法,属性为处理的异常类@ExceptionHandler({java.lang.NullPointerException.class, java.lang.ArithmeticException.class})public String exceptionHandle1(Exception ex, Model model) {// 向模型中添加异常对象model.addAttribute("msg", ex);// 跳转到异常页面return "error";}// 方法一不能处理的异常交给方法二处理@ExceptionHandler(java.lang.Exception.class)public String exceptionHandle2(Exception ex, Model model) {model.addAttribute("msg", ex);return "error2";}}
自定义异常处理
// 自定义异常处理器实现HandlerExceptionResolver接口,并放入Spring容器中@Componentpublic class MyExceptionHandler implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView = new ModelAndView();if (e instanceof NullPointerException) {modelAndView.setViewName("error");} else {modelAndView.setViewName("error2");}modelAndView.addObject("msg", e);return modelAndView;}}