繁体   English   中英

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

[英]Multiple Spring Exception Resolvers - Defer resolution

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

API要求返回ModelAndView,文档推断为默认处理返回null。 我可以返回指示调用其他解析程序的内容吗? 从理论上讲,我可以实现BeanPostProcessor并捕获任何其他解析器,但这似乎很hack ...

提前致谢。

返回null是正确的做法。

如果查看DispatcherServlet ,那么在处理ControllersException时,它将执行以下操作:

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

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

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

我认为在您的HandlerExceptionResolver被Spring添加的其他默认值之前调用是有意义的。 如果是这种情况,请在此处参阅我的其他文章,了解如何订购HandlerExceptionResolver实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM