作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们的是一个基于 Spring MVC 的 REST 应用程序。我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常。
我有
@ExceptionHandler(Throwable.class)
public @ResponseBody String handleErrors() {
return "error";
}
只要有异常抛出,它就起作用,它对任何错误不起作用。
我正在使用 Spring 4.0。有什么解决方法吗?
最佳答案
与 ExceptionHandler#value()
属性指示的相反
Class<? extends Throwable>[] value() default {};
和@ExceptionHandler
仅用于处理Exception
及其子类型。
Spring 使用 ExceptionHandlerExceptionResolver
来解析带注释的处理程序,方法如下
doResolveHandlerMethodException(HttpServletRequest request,
HttpServletResponse response, HandlerMethod handlerMethod, Exception exception)
如您所见,它只接受一个Exception
。
您不能使用此配置使用 @ExceptionHandler
处理 Throwable
或 Error
类型。
我会告诉你提供你自己的 HandlerExceptionResolver
实现,它确实处理 Throwable
实例,但你需要提供你自己的 DispatcherServlet
(以及大多数 MVC 堆栈)你自己,因为 DispatcherServlet
不会在任何你可以产生重大影响的地方catch
Throwable
实例。
更新:
从 4.3 开始,Spring MVC 将抛出的 Throwable
值包装在 NestedServletException
实例中,并将其暴露给 ExceptionHandlerExceptionResolver
。
关于java - ExceptionHandler 不适用于 Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548508/
我是一名优秀的程序员,十分优秀!