@RestControllerAdvice
是 Spring Framework 中的一个注解,它是一个用于处理整个应用程序中所有控制器抛出的异常的便捷方法。这个注解结合了 @ControllerAdvice
和 @ResponseBody
,使得异常处理不仅可以跨多个 @Controller
或 @RestController
应用,而且还可以直接将返回值序列化为 JSON 或其他 RESTful 格式的响应体。
主要目的
-
全局异常处理:
@RestControllerAdvice
可以捕获各种控制器层抛出的未处理异常,并对其进行统一处理,避免每个控制器中都写重复的异常处理代码。 -
应用程序一致性: 它帮助维护整个应用程序的错误处理策略一致性,确保所有的错误响应遵循相同的格式或结构,便于前端开发和维护。
-
数据转换: 结合
@ResponseBody
,可以将异常信息或任何返回对象自动转换成 JSON 或其他 RESTful 格式,方便和前端进行交互。
使用例子
假设我们正在开发一个电商应用,用户请求的商品ID有时可能找不到,通常这会抛出一个 ResourceNotFoundException
。下面是如何使用 @RestControllerAdvice
来处理这种情况:
java@RestControllerAdvice public class GlobalExceptionHandler { // 处理商品找不到的异常 @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException e) { // 日志记录异常,可以使用任何日志框架 log.error("Requested resource not found", e); // 返回一个404 Not Found响应 return ResponseEntity .status(HttpStatus.NOT_FOUND) .body("Error: " + e.getMessage()); } // 可以添加更多的异常处理方法 }
在这个例子中,无论在哪个控制器中抛出 ResourceNotFoundException
,GlobalExceptionHandler
类中的 handleResourceNotFound
方法都将捕获到,并返回一个统一格式的 404 响应。这极大地提高了代码的可重用性和可维护性。
2024年8月16日 00:48 回复