最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中通过自定义HandlerExceptionResolver处理异常
时间:2016-04-07 编辑:简简单单 来源:一聚教程网
Spring MVC通过HandlerExceptionResolver处理程序的异常
在了解HandlerExceptionResolver之前,我们先了解一下Resolver。Resolver直译为“解析器”,那么在spring MVC中是有很多“解析器”的,比如ViewResolver、MultipartResolver、ThemeResovler、LocalResover。不过别误会,这些“Resolver”之间几乎没任何关系,唯一的关系是名字中最后都是Resolver,然后都在同一个包下(org.springframework.web.servlet)
我们知道Spring MVC的核心是DispatcherServlet,那么其实上面列出的这些Resovler都是在DispatcherServlet中来加载的。
DispatcherServlet默认是通过在ApplicationContext中根据类型来装载HandlerExceptionResolver的,如下图。当然也可以在web.xml中配置DispatcherServlet时指定detectAllHandlerExceptionResolvers=false后通过beanName来加载HandlerExceptionResolver。
Image
通过上面的分析我们就知道,默认情况下在Spring MVC的dispatchServlet.xml配置文件中配置实现了HandlerExceptionResolver接口的bean就可以了,甚至不用指定beanName。如下图:
而要实现HandlerExceptionResolver接口,也是非常简单,只需要实现其中的resolveException方法即可。在这个方法里,你可以取到抛出异常时的HttpServletRequest对象、HttpServletResponse对象、当前正在执行的Handler、以及抛出的异常Exception。
下面是一个很简单的例子,仅在异常发生时记录了日志,然后将response的状态置为500,最后跳转到错误页面。
public class ExceptionHandler implements HandlerExceptionResolver {
private static final Log logger = LogFactory.getLog(ExceptionHandler.class);
@Override
public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse response,
Object arg2, Exception arg3) {
logger.error(“error uri:” + arg0.getRequestURI() + “,params:” + getFromString(arg0), arg3);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return new ModelAndView(“forward:/error/500”);
}
}
相关文章
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24
- 工厂方法在Spring框架中的运用介绍 10-24