SpringBoot項(xiàng)目中@RestControllerAdvice全局異常失效問題的解決
1、問題
使用@RestControllerAdvice添加了全局異常,但沒有生效
/**
* 全局異常處理
* @author Eric
* @date 2022-10-08 10:00:22
*/
@RestControllerAdvice
public class ExceptionControllerAdvice {
private static final Logger logger = LoggerFactory.getLogger(WxRedpackController.class);
/**
* 用來攔截valid的校驗(yàn)
* @param e
* @return
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Object handleVaildException(MethodArgumentNotValidException e) {
logger.info("數(shù)據(jù)校驗(yàn)出現(xiàn)問題:{},異常類型:{}", e.getMessage(), e.getClass());
BindingResult result = e.getBindingResult();
if (result.hasErrors()) {
Map<String, String> errorMap = new HashMap<>();
result.getFieldErrors().forEach((item) -> {
//獲取到的錯(cuò)誤提示
String message = item.getDefaultMessage();
//獲取到的錯(cuò)誤屬性名稱
String field = item.getField();
errorMap.put(field, message);
});
return ResponseUtil.fail(DATA_ERROR.code(),errorMap);
}
return ResponseUtil.fail();
}
/**
* 攔截未知的運(yùn)行時(shí)異常
*/
@ExceptionHandler(RuntimeException.class)
public Object notFount(RuntimeException e) {
logger.info("運(yùn)行時(shí)異常:", e);
return ResponseUtil.fail(DATA_ERROR.code(),e.getMessage());
}
/**
* 系統(tǒng)異常
*/
@ExceptionHandler(Exception.class)
public Object handleException(Exception e) {
logger.info(e.getMessage(), e);
return ResponseUtil.fail(DATA_ERROR.code(),"服務(wù)器網(wǎng)絡(luò)擁堵,請(qǐng)稍后再試");
}
}
2、解決
方式1:@ExceptionHandler 所在類沒有被Spring管理
因?yàn)?@SpringbootApplication默認(rèn)掃描本包和子包,為了防止 全局異常類未被掃描到,建議在啟動(dòng)類上加上包掃描

方式2:AOP process() 沒有異常拋出,自然不會(huì)被攔截掉。檢查項(xiàng)目中的切面編程,查看是否在某個(gè)切面將異常try-catch,然后沒有扔出來。
方式3:在@RestControllerAdvice @ConrollerAdivce 所在的類使用@Order(999999),注意這里不要引用錯(cuò)誤的包了了,org.springframework.core.annotation.Order

到此這篇關(guān)于SpringBoot項(xiàng)目中@RestControllerAdvice全局異常失效問題的解決的文章就介紹到這了,更多相關(guān)SpringBoot @RestController異常失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中@RestControllerAdvice注解實(shí)現(xiàn)全局異常處理類
- springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解
- 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)文章
解決JavaWeb-file.isDirectory()遇到的坑問題
JavaWeb開發(fā)中,使用`file.isDirectory()`判斷路徑是否為文件夾時(shí),需要特別注意:該方法只能判斷已存在的文件夾,若路徑不存在,無論其實(shí)際是否應(yīng)為文件夾,均會(huì)返回`false`,為了解決這個(gè)問題,可以采用正則表達(dá)式進(jìn)行判斷,但要求路徑字符串的結(jié)尾必須添加反斜杠(\)2025-02-02
Java中Vector與ArrayList的區(qū)別詳解
本篇文章是對(duì)Java中Vector與ArrayList的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
解決微服務(wù)feign調(diào)用添加token的問題
這篇文章主要介紹了解決微服務(wù)feign調(diào)用添加token的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-12-12
Java如何獲取List<String>中的String詳解
工作了這么長時(shí)間了,一直沒有記錄的習(xí)慣,以至于導(dǎo)致我即便是查過的東西總會(huì)忘記,下面這篇文章主要給大家介紹了關(guān)于Java如何獲取List<String>中String的相關(guān)資料,需要的朋友可以參考下2022-02-02
ElasticSearch如何設(shè)置某個(gè)字段不分詞淺析
最近在學(xué)習(xí)ElasticSearch官方文檔過程中發(fā)現(xiàn)的某個(gè)問題,記錄一下 希望能幫助到后面的朋友,下面這篇文章主要給大家介紹了關(guān)于ElasticSearch如何設(shè)置某個(gè)字段不分詞的相關(guān)資料,需要的朋友可以參考下2022-04-04

