在
DispatcherServlet默认情况下将加载并注册所有
HandlerExceptionResolver范围内的实现
ApplicationContext,以帮助您处理例外
Controllers。您会注意到
AbstractHandlerExceptionResolver该类实现了
Ordered。大多数
HandlerExceptionResolver实现会扩展此类,并
DispatcherServlet使用
HandlerExceptionResolver它来对处理您的抛出的异常进行排序
Controllers。
您可能会怀疑,
@ExceptionHandler您的批注
Controllers处理也由
HandlerExceptionResolver实现来处理。确切地说:
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver
我建议在您的情况下发生的是,
HandlerExceptionResolver通过
DispatcherServlet引起的排序会导致您的实现在有效忽略注释的
AnnotationMethodHandlerExceptionResolver含义之前被调用
@ExceptionHandler。
为了解决这个问题,我们需要做两件事:
- 直接
AnnotationMethodHandlerExceptionResolver
在您的Bean中注册为BeanApplicationContext
Order
将此bean 的值设置为大于自定义HandlerExceptionResolver
实现的值
这意味着在处理
Exceptions您的时
Controllers,Spring将首先查看
AnnotationMethodHandlerExceptionResolvercan
是否可以处理Exception,如果不能,则退回到您的自定义
HandlerExceptionResolver实现。
作为设置顺序的示例
HandlerExceptionResolver(假设您在某处使用XML配置):
<bean p:order="1" />
您可能还需要查看默认情况下
HandlerExceptionResolver注册的实现列表,
DispatcherServlet并确定最适合您的应用程序的顺序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)