springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解
springboot統(tǒng)一異常處理,使用@RestControllerAdvice
@RestControllerAdvice 是 Spring Boot 中用于全局異常處理的注解,它結(jié)合了 @ControllerAdvice 和 @ResponseBody 的功能。
這意味著使用 @RestControllerAdvice 注解的類將應(yīng)用于所有 @RequestMapping 方法,并且任何從這些方法返回的對(duì)象都會(huì)被轉(zhuǎn)換為 HTTP 響應(yīng)體。
下面是如何使用 @RestControllerAdvice 實(shí)現(xiàn)統(tǒng)一異常處理的一個(gè)示例:
創(chuàng)建自定義異常類
首先,創(chuàng)建一些自定義異常類來(lái)表示不同的錯(cuò)誤情況。
例如:
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}定義API錯(cuò)誤響應(yīng)格式
為了確保API返回的一致性,可以創(chuàng)建一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤響應(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)建一個(gè)帶有 @RestControllerAdvice 注解的類,用來(lái)處理不同類型的異常:
@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 方法來(lái)處理其他類型的異常
}配置全局異常屬性(可選)
你還可以在 application.properties 或 application.yml 文件中配置一些全局的行為,
例如是否顯示堆棧跟蹤信息:
# application.properties server.error.include-stacktrace=never
或者在 YAML 文件中:
# application.yml
server:
error:
include-stacktrace: never通過(guò)這種方式,@RestControllerAdvice 提供了一種簡(jiǎn)潔的方法來(lái)集中處理整個(gè)應(yīng)用程序中的異常,確保所有異常都能以一致的方式響應(yīng)客戶端請(qǐng)求。
此外,由于它自帶了 @ResponseBody 功能,所以特別適合 RESTful Web 服務(wù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot中@RestControllerAdvice注解實(shí)現(xiàn)全局異常處理類
- SpringBoot項(xiàng)目中@RestControllerAdvice全局異常失效問(wèn)題的解決
- SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處理類失效原因分析
- SpringBoot中@RestControllerAdvice注解的使用
- SpringBoot的@RestControllerAdvice作用詳解
- SpringBoot常用注解@RestControllerAdvice詳解
- SpringBoot中的@RestControllerAdvice注解詳解
- SpringBoot?@RestControllerAdvice注解對(duì)返回值統(tǒng)一封裝的處理方法
- SpringBoot中@RestControllerAdvice 全局異常處理的實(shí)現(xiàn)
相關(guān)文章
使用java采集京東商城區(qū)劃數(shù)據(jù)示例
這篇文章主要介紹了java采集京東的全國(guó)區(qū)劃數(shù)據(jù)示例,保存成json形式,如想轉(zhuǎn)換到數(shù)據(jù)庫(kù)只需反序列化為對(duì)象保存到數(shù)據(jù)庫(kù)即可2014-03-03
詳解Java中的迭代迭代器Iterator與枚舉器Enumeration
Iterator與Enumeration分別是實(shí)現(xiàn)迭代器和枚舉器類的接口,下面就帶大家來(lái)詳解Java中的迭代迭代器Iterator與枚舉器Enumeration,以及它們之間的區(qū)別.2016-05-05
Java將文件分割為多個(gè)子文件再將子文件合并成原始文件的示例
本篇文章主要介紹了Java將文件分割為多個(gè)子文件再將子文件合并成原始文件的示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02
java實(shí)用驗(yàn)證碼的實(shí)現(xiàn)代碼
這篇文章主要為大家介紹了java實(shí)用驗(yàn)證碼的實(shí)現(xiàn)代碼,驗(yàn)證碼實(shí)際上就是隨機(jī)選擇一些字符以圖片的形式展現(xiàn)在頁(yè)面上,感興趣的小伙伴們可以參考一下2016-03-03
詳解Springboot快速搭建跨域API接口的步驟(idea社區(qū)版2023.1.4+apache-maven-3.9.
這篇文章主要介紹了Springboot快速搭建跨域API接口(idea社區(qū)版2023.1.4+apache-maven-3.9.3-bin),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
關(guān)于javax.validation.constraints的超詳細(xì)說(shuō)明
這篇文章主要給大家介紹了關(guān)于javax.validation.constraints的超詳細(xì)說(shuō)明,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-07-07

