@RestControllerAdvice
@RestControllerAdvice 是 Spring Framework(3.2+)和 Spring Boot 中用于全局處理控制器層異常和統一響應格式的注解。它結合了 @ControllerAdvice 和 @ResponseBody 的功能,能夠攔截控制器方法拋出的異常,并以 JSON/XML 格式返回處理結果。
核心作用
全局異常處理
捕獲所有控制器(@RestController)拋出的異常,避免重復編寫異常處理代碼。
數據綁定與驗證處理
統一處理參數校驗(如 @Valid)失敗時的錯誤響應。
數據預處理
通過 @InitBinder 或 @ModelAttribute 對請求參數進行全局處理。
基礎用法示例
@RestControllerAdvice
public class GlobalExceptionHandler {// 處理特定異常@ExceptionHandler(IllegalArgumentException.class)public ResponseEntity<ErrorResponse> handleIllegalArgument(IllegalArgumentException ex) {ErrorResponse error = new ErrorResponse("參數錯誤", ex.getMessage());return ResponseEntity.badRequest().body(error);}// 處理所有未捕獲的異常@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) {ErrorResponse error = new ErrorResponse("服務器錯誤", ex.getMessage());return ResponseEntity.internalServerError().body(error);}
}
關鍵注解解析
注意事項
包掃描范圍
確保 @RestControllerAdvice 類位于 Spring 組件掃描路徑下。
異常匹配優先級
具體異常類型的處理器優先于通用異常處理器。
響應內容協商
支持根據請求的 Accept 頭自動切換 JSON/XML 等格式(需配置對應轉換器)。
通過合理使用 @RestControllerAdvice,可以實現異常處理與業務邏輯解耦,顯著提升代碼可維護性和 API 一致性。