我有一种情况,我支持需要解决特定异常的框架,但前提是该异常具有特定的消息代码(内部异常)。我已经添加了一个自定义HandlerExceptionResolver来处理这个特定的异常,但很好奇当我找不到匹配的消息代码时,如何将这个异常的处理“延迟”到以后的解析器。
API调用返回ModelAndView,文档推断返回null以进行默认处理。有什么我可以回来指示调用其他解析器吗?理论上我可以实现BeanPostProcessor并捕获任何其他解析器,但这看起来很糟糕......
提前致谢。
答案 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。