与@ExceptionHandler或HandlerExceptionResolver相比,@ ControllerAdvice在处理异常方面有什么优势?


问题内容

Spring 3.2 引入了@ControllerAdvice注释,用于在Spring
MVC应用程序中处理异常。而在此之前版本的春天已经@ExceptionHandlerHandlerExceptionResolver以处理在Spring
MVC应用程序异常。那么为什么 Spring 3.2 引入了@ControllerAdvice注释来处理异常?我坚信 Spring
3.2
引入了@ControllerAdvice注解 来解决 @ExceptionHandler or
的局限性,HandlerExceptionResolver或者使 异常处理更加强大

谁能解释@ControllerAdvice过度@ExceptionHandlerHandlerExceptionResolver处理异常的好处?


问题答案:

@ExceptionHandler

@ExceptionHandlerController级别 工作,并且仅在该 特定Controller上 处于活动状态
而在整个应用程序中则不处于全局状态。

HandlerExceptionResolver

这将解决应用程序引发的任何异常。它用于将标准Spring异常解析为其 对应的HTTP状态代码 。它没有控制响应的主体,这意味着
它没有为响应的主体设置任何内容, 它确实 在响应 上映射了状态代码,但 主体为null

@ControllerAdvice

@ControllerAdvice 用于Spring MVC应用程序中的全局错误处理。它还完全控制响应主体和状态代码。