springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解
springboot統(tǒng)一異常處理,使用@RestControllerAdvice
@RestControllerAdvice
是 Spring Boot
中用于全局異常處理的注解,它結(jié)合了 @ControllerAdvice
和 @ResponseBody
的功能。
這意味著使用 @RestControllerAdvice
注解的類將應(yīng)用于所有 @RequestMapping
方法,并且任何從這些方法返回的對象都會被轉(zhuǎn)換為 HTTP 響應(yīng)體。
下面是如何使用 @RestControllerAdvice
實(shí)現(xiàn)統(tǒng)一異常處理的一個示例:
創(chuàng)建自定義異常類
首先,創(chuàng)建一些自定義異常類來表示不同的錯誤情況。
例如:
public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } }
定義API錯誤響應(yīng)格式
為了確保API返回的一致性,可以創(chuàng)建一個標(biāo)準(zhǔn)的錯誤響應(yīng)結(jié)構(gòu),如 ApiError
類:
public class ApiError { private HttpStatus status; private String message; private LocalDateTime timestamp; public ApiError(HttpStatus status, String message, Throwable throwable) { this.status = status; this.message = message; this.timestamp = LocalDateTime.now(); } // Getters and Setters... }
使用@RestControllerAdvice創(chuàng)建全局異常處理器
然后,你可以創(chuàng)建一個帶有 @RestControllerAdvice
注解的類,用來處理不同類型的異常:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<ApiError> handleResourceNotFoundException(ResourceNotFoundException ex) { ApiError apiError = new ApiError(HttpStatus.NOT_FOUND, ex.getMessage(), ex); return new ResponseEntity<>(apiError, HttpStatus.NOT_FOUND); } @ExceptionHandler(Exception.class) public ResponseEntity<ApiError> handleAllExceptions(Exception ex) { ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, "An error occurred", ex); return new ResponseEntity<>(apiError, HttpStatus.INTERNAL_SERVER_ERROR); } // 你可以添加更多特定的 @ExceptionHandler 方法來處理其他類型的異常 }
配置全局異常屬性(可選)
你還可以在 application.properties
或 application.yml
文件中配置一些全局的行為,
例如是否顯示堆棧跟蹤信息:
# application.properties server.error.include-stacktrace=never
或者在 YAML 文件中:
# application.yml server: error: include-stacktrace: never
通過這種方式,@RestControllerAdvice
提供了一種簡潔的方法來集中處理整個應(yīng)用程序中的異常,確保所有異常都能以一致的方式響應(yīng)客戶端請求。
此外,由于它自帶了 @ResponseBody
功能,所以特別適合 RESTful Web 服務(wù)。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- springboot中的controller參數(shù)映射問題小結(jié)
- springboot中Controller內(nèi)文件上傳到本地及阿里云操作方法
- springboot如何通過controller層實(shí)現(xiàn)頁面切換
- springboot Controller直接返回String類型帶來的亂碼問題及解決
- springboot全局異常處理方式@ControllerAdvice和@ExceptionHandler
- SpringBoot之controller參數(shù)校驗(yàn)詳解
- SpringBoot如何實(shí)現(xiàn)調(diào)用controller和Service層方法
相關(guān)文章
Java生成的隨機(jī)數(shù)靠譜嗎?多少次會重復(fù)?
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java生成的隨機(jī)數(shù)靠不靠譜展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06

springboot 2.3之后消失的hibernate-validator解決方法

JDBC數(shù)據(jù)庫連接過程及驅(qū)動加載與設(shè)計模式詳解

Java讀寫鎖ReadWriteLock原理與應(yīng)用場景詳解

SpringBoot feign動態(tài)設(shè)置數(shù)據(jù)源(https請求)

Java 高并發(fā)的三種實(shí)現(xiàn)案例詳解

Idea 同一窗口導(dǎo)入多個項(xiàng)目的實(shí)現(xiàn)步驟