与ExceptionHandler #value()属性指示的相反
Class extends Throwable>[] value() default {};
和@ExceptionHandler仅用于处理Exception及其子类型.
Spring使用ExceptionHandlerExceptionResolver来解析带注释的处理程序,使用以下方法
doResolveHandlerMethodException(HttpServletRequest request,
HttpServletResponse response, HandlerMethod handlerMethod, Exception exception)
你可以看到只接受一个例外.
使用此配置时,无法使用@ExceptionHandler处理Throwable或Error类型.
我会告诉你提供你自己的HandlerExceptionResolver实现,它确实处理Throwable实例,但你需要自己提供自己的DispatcherServlet(以及大多数MVC堆栈),因为DispatcherServlet不能在你可以创建的任何地方捕获Throwable实例.显着差异.
更新:
从4.3开始,Spring MVC在NestedServletException实例中包装抛出的Throwable值,并将其暴露给ExceptionHandlerExceptionResolver.