上一节小博老师给大家介绍了SpringMVC对异常处理的方法之一,使用默认的SimpleMappingExceptionResolver实现类。我们知道SimpleMappingExceptionResolver类是接口HandlerExceptionResolver的实现类。所以,我们完全可以自定义一个异常解析类来处理异常信息。这一节我们就详细了解一下HandlerExceptionResolver接口,以及如何自定义实现类。
先看一下HandlerExceptionResolver接口的源代码:
接口定义很简单,就一个resolveException方法。该方法用来处理Controller中的异常。Exception ex参数即Controller抛出的具体异常对象。返回值类型是ModelAndView,可以通过它设置异常时显示的页面。
接下来我们实现一个自己定义的异常处理类:
这段代码的意思是,如果是IOException类型的异常跳转到ioErrorPage页面,如果是ClassNotFoundException类型的异常跳转到notFoundPage页面。当然,我们还可以做更多的处理。比如发送email,保存异常到文件等等。相对于SimpleMappingExceptionResolver可以更加灵活的进行判断和处理。
当然,还需要将自定义的BwfHandlerExceptionResolver实现类配置到Spring配置文件中。
注意:如果resolveException返回了ModelAndView,会优先显示返回值中的页面。如果,resolveException返回null,并且在web.xml中配置了error-page的500状态码对应的页面,则会显示该页面。