gpt4 book ai didi

java - ExceptionHandler 不适用于 Throwable

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:59 24 4
gpt4 key购买 nike

我们的是一个基于 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 处理 ThrowableError 类型。

我会告诉你提供你自己的 HandlerExceptionResolver 实现,它确实处理 Throwable 实例,但你需要提供你自己的 DispatcherServlet (以及大多数 MVC 堆栈)你自己,因为 DispatcherServlet 不会在任何你可以产生重大影响的地方catch Throwable 实例。


更新:

从 4.3 开始,Spring MVC 将抛出的 Throwable 值包装在 NestedServletException 实例中,并将其暴露给 ExceptionHandlerExceptionResolver

关于java - ExceptionHandler 不适用于 Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com