多个Spring异常解析器 - 延迟解析

时间:2014-08-06 15:03:29

标签: java spring spring-mvc

我有一种情况,我支持需要解决特定异常的框架,但前提是该异常具有特定的消息代码(内部异常)。我已经添加了一个自定义HandlerExceptionResolver来处理这个特定的异常,但很好奇当我找不到匹配的消息代码时,如何将这个异常的处理“延迟”到以后的解析器。

API调用返回ModelAndView,文档推断返回null以进行默认处理。有什么我可以回来指示调用其他解析器吗?理论上我可以实现BeanPostProcessor并捕获任何其他解析器,但这看起来很糟糕......

提前致谢。

1 个答案:

答案 0 :(得分:2)

返回null是正确的做法。

如果您查看DispatcherServlet,则会在Exception处理Controllers时看到它执行以下操作:

// Check registered HandlerExceptionResolvers...
ModelAndView exMv = null;

for (HandlerExceptionResolver handlerExceptionResolver : this.handlerExceptionResolvers) {
    exMv = handlerExceptionResolver.resolveException(request, response, handler, ex);
    if (exMv != null) {
        break;
    }
}

基本上这意味着它将尝试HandlerExceptionResolver中所有已注册的ApplicationContext实例,直到找到可以处理异常的实例。通过返回null,您只是说DispatcherServlet应该尝试链中的下一个。

我认为在Spring添加其他默认值之前调用HandlerExceptionResolver是有意义的。如果是这种情况,请参阅我的其他帖子,了解如何订购HandlerExceptionResolver个实例here