[英]Multiple Spring Exception Resolvers - Defer resolution
我遇到的情况是,我支持一个需要解决特定异常的框架,但前提是该异常具有特定的消息代码(内部异常)。 我添加了一个自定义HandlerExceptionResolver来处理此特定的异常,但是当我找不到匹配的消息代码时,很好奇如何将这种异常的处理“推迟”给以后的解析器。
API要求返回ModelAndView,文档推断为默认处理返回null。 我可以返回指示调用其他解析程序的内容吗? 从理论上讲,我可以实现BeanPostProcessor并捕获任何其他解析器,但这似乎很hack ...
提前致谢。
返回null是正确的做法。
如果查看DispatcherServlet
,那么在处理Controllers
的Exception
时,它将执行以下操作:
// 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.