Spring MVC的Controller统一异常处理:HandlerExceptionResolver
出现异常其实不可怕,可怕的是出现了异常,你却不知道,也没有进行异常处理。 HandlerExceptionResolver接口public interface HandlerExceptionResolver {
ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex);
} HandlerExceptionResolver接口中定义了1个resolveException方法,用于处理Controller中的异常。Exception ex参数即Controller抛出的异常。返回值类型是ModelAndView,可以通过这个返回值来设置异常时显示的页面。 实现HandlerExceptionResolverHandlerExceptionResolver是1个interface,还需要定义1个实现类,来实现异常出现后的逻辑。 public class MyExceptionResolver implements HandlerExceptionResolver {
private ExceptionLogDao exceptionLogDao;
@Override
public ModelAndView resolveException(HttpServletRequest request,Exception ex) {
// 异常处理,例如将异常信息存储到数据库
exceptionLogDao.save(ex);
// 视图显示专门的毛病页
ModelAndView modelAndView = new ModelAndView("errorPage");
return modelAndView;
}
} 上面代码实现了HandlerExceptionResolver类的resolveException方法。出现异常时,会将异常信息存储到数据库,并显示专门的毛病页面。 配置最后,还需要将自己的HandlerExceptionResolver实现类配置到Spring配置文件中,或加上@Component注解。 <bean class="com.xxg.MyExceptionResolver" /> 至此,MyExceptionResolver就能够处理Controller抛出的异常了。 相干问题HandlerExceptionResolver能处理哪些异常?HandlerExceptionResolver只能处理所有的Exception,也就是HTTP状态码是500的异常,不能处理404、400等其他状态码对应的问题。 HandlerExceptionResolver和web.xml中配置的error-page会有冲突吗?web.xml中配置error-page一样是配置出现毛病时显示的页面: <error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page> 如果resolveException返回了ModelAndView,会优先根据返回值中的页面来显示。不过,resolveException可以返回null,此时则展现web.xml中的error-page的500状态码配置的页面。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |