gpt4 book ai didi

java - @ControllerAdvice 异常处理与@ResponseStatus 一起

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:15 27 4
gpt4 key购买 nike

我有 @ControllerAdvice 类,它处理一组异常。我们还有一些其他异常,这些异常用 @ResponseStatus 注释进行注释。为了结合这两种方法,我们使用博客文章中描述的技术:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc ,即在 ControllerAdvice 中,我们按以下方式处理通用 Exception:

    @ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
// If the exception is annotated with @ResponseStatus rethrow it and let
// the framework handle it - like the OrderNotFoundException example
// at the start of this post.
// AnnotationUtils is a Spring Framework utility class.
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
throw e;

// Otherwise setup and send the user to a default error-view.
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}

它就像一个魅力,但是,使用这种技术会导致应用程序日志中出现以下文本的错误:

2014-06-11 15:51:32.907 ERROR o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Failed to invoke @ExceptionHandler method: ...

This is caused by this piece of code in ExceptionHandlerExceptionResolver:

try {
if (logger.isDebugEnabled()) {
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
}
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception);
}
catch (Exception invocationEx) {
logger.error("Failed to invoke @ExceptionHandler method: " + exceptionHandlerMethod, invocationEx);
return null;
}

有谁知道如何正确结合这两种异常处理方法来避免日志中的错误?

谢谢,简

最佳答案

这是一个老问题,但我今天刚遇到这个问题,并找到了比禁用 ExceptionHandlerExceptionResolver 日志记录更好的解决方案。事实证明,这个问题可以通过升级到最新版本的 spring 框架来解决(4.3.8 对我有用)。 ExceptionHandlerExceptionResolver 已修复,可以检测原始异常是否从 @ExceptionHandler 重新抛出。在这种情况下,不再记录异常。

关于java - @ControllerAdvice 异常处理与@ResponseStatus 一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164862/

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