Spring MVC 中的 `@ControllerAdvice` 注解有什么作用?

推荐答案

@ControllerAdvice 是 Spring MVC 中的一个注解,用于全局处理控制器中的异常、绑定数据以及模型属性的初始化。它可以将多个 @ExceptionHandler@InitBinder@ModelAttribute 方法集中到一个类中,从而实现对多个控制器的统一处理。

本题详细解读

1. 全局异常处理

@ControllerAdvice 最常见的用途是全局异常处理。通过在 @ControllerAdvice 注解的类中定义 @ExceptionHandler 方法,可以捕获并处理控制器中抛出的异常。例如:

在这个例子中,handleException 方法会捕获所有控制器中抛出的 Exception 异常,并返回一个包含错误信息的 ResponseEntity

2. 全局数据绑定

@ControllerAdvice 还可以用于全局数据绑定。通过在 @ControllerAdvice 注解的类中定义 @InitBinder 方法,可以自定义数据绑定的行为。例如:

在这个例子中,initBinder 方法会禁止所有控制器中的 id 字段绑定。

3. 全局模型属性初始化

@ControllerAdvice 还可以用于全局模型属性的初始化。通过在 @ControllerAdvice 注解的类中定义 @ModelAttribute 方法,可以为所有控制器的模型添加公共属性。例如:

在这个例子中,addAttributes 方法会为所有控制器的模型添加一个名为 globalAttribute 的属性。

4. 限定作用范围

@ControllerAdvice 还可以通过 @ControllerAdvice(annotations = RestController.class)@ControllerAdvice(basePackages = "com.example.controllers") 等方式限定其作用范围,使其只对特定的控制器或包中的控制器生效。

5. 总结

@ControllerAdvice 提供了一种集中处理控制器中的异常、数据绑定和模型属性的方式,使得代码更加模块化和易于维护。通过合理使用 @ControllerAdvice,可以减少重复代码,提高代码的可读性和可维护性。

纠错
反馈