一、SpringMVC异常处理的思路
系统的Dao、Service、Controller层的异常都通过throws Exception向上抛出,
最后由SpringMVC前端控制器交给异常处理器进行处理。
SpringMVC的异常处理主要有两种方式:
- 使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver
- 实现SpringMVC的异常处理结构HandlerExceptionResolver自定义一个异常处理器
二、简单异常处理器SimpleMappingExceptionResolver
这个处理器需要在spring-mvc.xml中配置,它的功能是将各种异常类型映射到相应的错误页面
(由于我已经配置过内部资源视图解析器,所以图中的error1和error2会分别解析成/error1.jsp和/error2.jsp)
三、实现HandlerExceptionResolver接口自定义异常处理器
1.实现这个接口的resolveException()方法,
这里面有一个重要的参数ex和重要的返回值,在这个方法中根据具体的业务去处理各种类型的异常:
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
// 参数Exception ex是报异常的异常对象,返回值ModelAndView就是要跳转的错误视图的信息
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
if(ex instanceof MyException){
modelAndView.addObject("info", "自定义的异常");
}else if (ex instanceof ClassCastException){
modelAndView.addObject("info", "类转换异常");
}
modelAndView.setViewName("error");
return modelAndView;
}
}
2.自定义的异常处理器也需要在spring-mvc.xml中配置:
<!--自定义异常处理器-->
<bean class="com.lxl.controller.resolver.MyExceptionResolver"/>