@ControllerAdvice
是 Spring Framework 的一个注解,它用于定义一个全局异常处理、数据绑定或数据预处理的组件。这个注解通常用在 Spring MVC 应用程序中,以集中处理控制器(即使用 @Controller
或 @RestController
注解的类)的异常。
以下是 @ControllerAdvice
注解的一些关键点:
-
全局异常处理:使用
@ControllerAdvice
可以创建一个类来处理所有控制器中抛出的异常。这是通过在类上添加@ControllerAdvice
注解并定义方法来处理特定异常来实现的。 -
方法签名:在
@ControllerAdvice
类中,你可以通过在方法上使用@ExceptionHandler
注解来指定该方法处理哪种类型的异常。 -
返回值:异常处理方法可以返回多种类型的值,包括
ModelAndView
、View
、String
(视图名称)或响应体数据(如@ResponseBody
注解的String
或其他对象)。 -
应用范围:
@ControllerAdvice
注解的类可以标注在任何 Spring 管理的 Bean 上,并且可以包含@Profile
注解以指定在哪个或哪些环境中激活。 -
多实例:你可以有多个
@ControllerAdvice
类,每个类可以服务于不同的控制器或组件。 -
继承性:
@ControllerAdvice
可以继承,子类可以覆盖或添加新的异常处理方法。
以下是一个简单的 @ControllerAdvice
使用示例:
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public String handleArithmeticException(ArithmeticException ex) {
return "Error: " + ex.getMessage();
}
// 可以添加更多的异常处理方法
}
在这个示例中,GlobalExceptionHandler
类被标记为 @ControllerAdvice
,这意味着它是一个全局异常处理器。类中的 handleArithmeticException
方法使用 @ExceptionHandler
注解来指定它处理 ArithmeticException
类型的异常。如果应用程序中的任何控制器抛出这种类型的异常,这个方法就会被调用,并且异常的消息将作为响应体返回。使用 @ResponseBody
注解表示方法的返回值将直接作为响应体返回给客户端。