我们在实际项目中Dao层和Service层的异常都会被抛到Controller层。但是如果我们在Controller的方法中都加上异常的try...catch处理也会显的非常的繁琐。
所以SpringMVC为我们提供了统一异常处理方案。可以把Controller层的异常进行统一处理。这样既提高了代码的复用性也让异常处理代码和我们的业务代码解耦。
一种是实现HandlerExceptionResolver接口的方式,一种是使用@ControllerAdvice注解的方式。
HandlerExceptionResolver
①实现接口
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
}
②重写方法
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
//如果handler中出现了异常,就会调用到该方法,我们可以在本方法中进行统一的异常处理。
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//获取异常信息,把异常信息放入域对象中
String msg = ex.getMessage();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",msg);
//跳转到error.jsp
modelAndView.setViewName("/WEB-INF/page/error.jsp");
return modelAndView;
}
}
注入容器
可以使用注解注入也可以使用xml配置注入。这里使用注解注入的方式。在类上加@Component注解,注意要保证类能被组件扫描扫描到。
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
//....省略无关代码
}