- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有 @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/
我有带有自定义异常的代码: @ResponseStatus(value = BAD_REQUEST, reason = "Login is busy") public class LoginI
我正在使用以下代码处理我的受控异常: @ExceptionHandler(MyException.class) @ResponseStatus(HttpStatus.NOT_FOUN
我不知道为什么,但 @ControllerAdvice覆盖在 Exception 处定义的响应代码级别使用 @ResponseStatus注解。 异常(exception) : @ResponseSt
我正在尝试为我的自定义异常提供动态消息,如下面的代码片段所示: @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Entity not f
我正在使用 ServiceStack,但无法让自动注入(inject)的 ResponseStatus 属性处理我的响应 DTO。我的响应 DTO 实现了 IHasResponseStatus 但它不
使用@ResponseStatus 允许在 Spring 中设置 Rest 响应的状态。但是,这如何用于可能来自同一请求的不同类型的状态呢? 例如, Controller 中有一个方法可能会返回 20
关于我所拥有的和我正在努力实现的信息 我正在使用 ServiceStack 并将其启动并运行以满足我的需要,但是我无法找到如何为未捕获的异常禁用 Body/Content。 我有 ServiceSta
我创建了一个自定义 @ResponseStatus 异常,并希望它作为 @RestController 的 json 响应以及响应负载返回。 @ResponseStatus(HttpStatus.BA
在我的 Spring API 中,我想使用 Spring 的注解 @ResponseStatus 来处理创建、放置和删除等操作的响应。每个端点都正常工作,但它们总是返回空响应。 为什么带注释的端点的响
是否需要 ResponseStatus? wiki 说我们需要在我们的响应 DTO 中有一个 ResponseStatus 属性来处理异常序列化: https://github.com/Service
我真的不确定使用Spring 3.2 MVC是否可行。 我的 Controller 有一个声明如下的方法: @RequestMapping(method = RequestMethod.GET) @R
我需要以 Response 类格式返回一些内容,但我有一个 SAMLResult 变量,因此当我获取状态 (ResponseStatus) 时,我不知道找不到任何方法将其解析为 Response 变量
我开发了一个从我的 ServiceStack 服务中抛出的自定义异常。状态代码和描述已正确映射,但内部“statusCode”值始终显示为“0”。 下面是我如何实现我的异常: public class
我有 @ControllerAdvice 类,它处理一组异常。我们还有一些其他异常,这些异常用 @ResponseStatus 注释进行注释。为了结合这两种方法,我们使用博客文章中描述的技术:http
我在异常中使用 Spring 注释 @ResponseStatus @ResponseStatus(value=HttpStatus.UNAUTHORIZED) public class Unauth
介绍 在 Spring 中,我们可以通过多种方式设置 HTTPResponse 的状态。在本教程中,我们将使用 Spring ResponseStatus 注解来实现这一点。 我们可以使用@Respo
我尝试实现一个 @ControllerAdvice 来全局处理与我的 Web 应用程序相关的一些一般异常。我想发送一个包装好的 JSON 响应,并相应地设置响应状态。这是一个代码示例。 @Contro
我想阻止 spring 将完整的 Runtimexceptions 堆栈跟踪发送到前端。我做了这样的事情: @ControllerAdvice public class RestErrorHandle
这是我目前所拥有的: Controller : public abstract class MyController { @ExceptionHandler(Exception.class)
我正在学习 Spring Core 认证,我对 Spring 如何处理 REST 请求有一些疑问。 我知道在 REST 中,资源作为名称公开,并且对这些资源的操作是 HTTP 方法,例如 GET、PU
我是一名优秀的程序员,十分优秀!