gpt4 book ai didi

java - 永远不会调用 Controller 中的 Spring MVC @ExceptionHandler 方法

转载 作者:太空狗 更新时间:2023-10-29 23:02:46 24 4
gpt4 key购买 nike

我有一个带有一些简单 REST 服务请求的 Spring MVC Controller 。当从我的服务中抛出特定异常时,我想添加一些错误处理,但我无法真正调用用 @ExceptionHandler 注释的处理程序方法。这是我故意抛出异常以尝试让我的处理程序方法接管的一项服务。永远不会调用处理程序方法,Spring 只会向调用客户端返回 500 错误。你对我做错了什么有什么想法吗?

@ExceptionHandler(IOException.class)
public ModelAndView handleIOException(IOException ex, HttpServletRequest request, HttpServletResponse response) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
System.out.println("It worked!");
return new ModelAndView();
}

@RequestMapping(value = "/json/remove-service/{id}", method = RequestMethod.DELETE)
public void remove(@PathVariable("id") Long id) throws IOException {
throw new IOException("The handler should take over from here!");
}

最佳答案

令人沮丧的是,我也曾遭受过这种痛苦。我发现,如果您错误地实现了 Throwable 而不是 Exception,则异常解析器只会将您的 Throwable 作为 IllegalStateException 重新抛出.这将无法调用您的 @ExceptionHandler

如果您实现的是 Throwable 而不是 Exception,请尝试将其更改为 Exception

这是来自 InvocableHandlerMethod 的相关代码

catch (InvocationTargetException e) {
// Unwrap for HandlerExceptionResolvers ...
Throwable targetException = e.getTargetException();
if (targetException instanceof RuntimeException) {
throw (RuntimeException) targetException;
}
else if (targetException instanceof Error) {
throw (Error) targetException;
}
else if (targetException instanceof Exception) {
throw (Exception) targetException;
}
else {
String msg = getInvocationErrorMessage("Failed to invoke controller method", args);
throw new IllegalStateException(msg, targetException);
}
}

关于java - 永远不会调用 Controller 中的 Spring MVC @ExceptionHandler 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9909806/

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