本文共 2994 字,大约阅读时间需要 9 分钟。
SpringMVC处理异常的三种方式
使用 @ ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @controlleradvice 注解@Controller
public class UserController {
/*** 模拟 NullPointerException * @return */@RequestMapping("/show1")public String showInfo(){ String str = null; str.length(); return "index";}/** * 模拟 ArithmeticException * @return */@RequestMapping("/show2")public String showInfo2(){ int a = 10/0; return "index";}/** * java.lang.ArithmeticException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定 * 参数 Exception e:会将产生异常对象注入到方法中 */@ExceptionHandler(value={java.lang.ArithmeticException.class})public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error1"); return mv;}/** * java.lang.NullPointerException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视 图的指定 * 参数 Exception e:会将产生异常对象注入到方法中 */@ExceptionHandler(value={java.lang.NullPointerException.class})public ModelAndView nullPointerExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error2"); return mv;}
}
@ControllerAdvice
public class GlobalException {
/** * java.lang.ArithmeticException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定 * 参数 Exception e:会将产生异常对象注入到方法中 */@ExceptionHandler(value={java.lang.ArithmeticException.class})public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()+" -- advice"); mv.setViewName("error1"); return mv;}/** * java.lang.NullPointerException * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视 图的指定 * 参数 Exception e:会将产生异常对象注入到方法中 */@ExceptionHandler(value={java.lang.NullPointerException.class})public ModelAndView nullPointerExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()+" -- advice"); mv.setViewName("error2"); return mv;}
}
如果 @ExceptionHandler 注解中未声明要处理的异常类型,则默认为参数列表中的异常类型。所以还可以写成这样:@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler()@ResponseBodyString handleException(Exception e){ return "Exception Deal! " + e.getMessage();}
}
控制器中就只有业务处理的代码了
@Component //注意该类需要交给Spring容器管理
public class MyExceptionResolver implements HandlerExceptionResolver {@Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,Exception ex) { System.out.println(ex.getMessage()); ModelAndView mv = new ModelAndView(); mv.setViewName("/error.jsp"); return mv; } }转载地址:http://lehpi.baihongyu.com/