最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot捕獲全局異常實現(xiàn)過程

 更新時間:2026年03月13日 10:53:11   作者:我是菜鳥吶  
本文主要介紹了Java中的異常和錯誤,包括Exception和Error的區(qū)別、如何捕捉全局異常、自定義異常的實現(xiàn)等,通過實例代碼和步驟,展示了如何在Spring?Boot項目中實現(xiàn)全局異常處理,并自定義異常類來增強程序的健壯性

學(xué)習(xí)目標(biāo)

java中的異常和錯誤

學(xué)習(xí)內(nèi)容

  • 首頁要了解什么是異常什么是錯誤
  • 捕捉全局異常
  • 自定義異常

java中異常和錯誤的區(qū)別

Error類和Exception類的父類都是throwable類: 他們的區(qū)別是:

  • Error類一般是指與虛擬機(jī)相關(guān)的問題,如系統(tǒng)崩潰,虛擬機(jī)錯誤,內(nèi)存空間不足,方法調(diào)用棧溢等。對于這類錯誤的導(dǎo)致的應(yīng)用程序中斷,僅靠程序本身無法恢復(fù)和和預(yù)防,遇到這樣的錯誤,建議讓程序終止。
  • Exception類表示程序可以處理的異常,可以捕獲且可能恢復(fù)。遇到這類異常,應(yīng)該盡可能處理異常,使程序恢復(fù)運行,而不應(yīng)該隨意終止異常。

常見的異常 :

  • ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常,
  • ArithmaticException 算數(shù)異常 如除數(shù)為零
  • NullPointerException 空指針異常
  • IllegalArgumentException 不合法參數(shù)異常

直接上代碼

public class exception {
    public static void main(String[] args) {
        exception01();
    }
    public static void exception01(){
        int i =1/0;
    }
}

結(jié)果是:算數(shù)異常,如果直接讓用戶看見異常信息不友好

改造一下寫法:把異常捕獲,這樣就不會看見異常信息,這里寫的有些問題 不應(yīng)該寫Execption,這個異常都所有異常的父類,應(yīng)該寫對應(yīng)的異常,算數(shù)異常是 arithmeticExecption

真正的項目里發(fā)生異常該怎么捕獲呢?下面就來了解一下全局異常,創(chuàng)建springboot項目

1.創(chuàng)建一個controller包,里面寫了一個異常方法,

2.配置swagger-ui來進(jìn)行接口的訪問

 @GetMapping("exception")
 public R exception(){
   throw new RuntimeException("運行異常");
}

結(jié)果肯定是報錯,但是這個異常是可以人工干預(yù)的,避免控制臺輸出報錯信息,或者把報錯解釋的詳細(xì)一點

創(chuàng)建一個MyExceptionHandler類,這個類就是來幫我們捕獲全局異常的類,

1.在這個類上加上@RestControllerAdvice注解

2.創(chuàng)建一個方法

3.在方法上加上@ExceptionHandler注解中可以添加參數(shù),參數(shù)是某個異常類的class,代表這個方法 專門處理該類異常,比如這樣:,

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public String exceptionHandler(Exception e){
        log.error("未知異常!原因是:"+e.getMessage());
        return "未知錯誤?。?!";
    }
 }

繼續(xù)訪問異常的接口,沒有報錯了,返回的結(jié)果也我定義的數(shù)據(jù)

控制臺也輸出異常信息

到這異常的捕獲就完成了,但是我們捕獲都是系統(tǒng)自帶的異常,我就在想能不能自定義異常,然后進(jìn)行捕獲,開干

實現(xiàn)步驟:

  1. 創(chuàng)建一個枚舉進(jìn)行異常傳遞
  2. 創(chuàng)建一個自定義的異常類取名叫CustomException,
  3. 在MyExceptionHandler全局異常中把自定義異常捕獲

枚舉

@Getter
@AllArgsConstructor
public enum RCode {

    SUCCESS(0,"操作成功!"),
    fail(1,"操作失敗!"),
    AUTH_ERROR(40411,"用戶名或密碼不存在!"),
    NO_AUTH_ERROR(40412,"無權(quán)訪問!"),
    SYS_VALID_ERROR(501,"參數(shù)校驗錯誤"),
    SYS_EXCEPTION(2,"模擬異常"),
    INVALID_TOKEN(40410,"Token無效,您無權(quán)訪問該接口"),
;

    private Integer code;
    private String msg;

}

CustomException類

@Getter
public class CustomException extends RuntimeException{
    private RCode rCode;

    public CustomException(RCode rCode) {
        this.rCode = rCode;
    }

    public CustomException(Throwable cause, RCode rCode) {
        super(cause);
        this.rCode = rCode;
    }
}

在全局異常類中捕獲

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
    //捕獲自定義異常
    @ExceptionHandler(value = CustomException.class)
    public R CustomerExceptionHandler(CustomException e){
         log.error("未知異常!原因是:"+e.getRCode().getMsg());
        return R.error(e.getRCode());
    }
 }

進(jìn)行測試:首頁修改controller中接口拋出的異常 換成我們自己定義的異常類

進(jìn)行測試:結(jié)果

控制臺:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)的n*n矩陣求值及求逆矩陣算法示例

    java實現(xiàn)的n*n矩陣求值及求逆矩陣算法示例

    這篇文章主要介紹了java實現(xiàn)的n*n矩陣求值及求逆矩陣算法,結(jié)合具體實例形式分析了java基于數(shù)組的矩陣定義、遍歷、運算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java如何獲取一個IP段內(nèi)的所有IP地址

    Java如何獲取一個IP段內(nèi)的所有IP地址

    這篇文章主要為大家詳細(xì)介紹了Java如何根據(jù)起始和結(jié)束的IP地址獲取IP段內(nèi)所有IP地址,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Java出現(xiàn):JWT strings must contain exactly 2 period characters. Found: 0的常見原因及解決方案

    Java出現(xiàn):JWT strings must contain exactly&

    這篇文章主要介紹了JWT令牌解析失敗的原因和解決方法,包括Header、Payload和Signature三段式結(jié)構(gòu),常見錯誤原因,通用解決方案以及額外注意點,需要的朋友可以參考下
    2026-01-01
  • Spring使用 AsyncConfigurer 自定義線程池實現(xiàn)高效異步任務(wù)管理

    Spring使用 AsyncConfigurer 自定義線程池實現(xiàn)高效異步任務(wù)管理

    Spring框架的@Async注解雖然提供了異步任務(wù)支持,但默認(rèn)線程池不適合生產(chǎn)環(huán)境,通過自定義線程池配置類實現(xiàn)AsyncConfigurer接口,可以統(tǒng)一管理線程池參數(shù),解決企業(yè)級應(yīng)用中線程爆炸、拒絕策略和可觀測性等問題,下面就來介紹一下如何實現(xiàn)
    2026-02-02
  • Java多線程之多種鎖和阻塞隊列

    Java多線程之多種鎖和阻塞隊列

    今天帶大家學(xué)習(xí)的是Java多線程的相關(guān)知識,文章圍繞著java多種鎖和阻塞隊列展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • SpringBoot如何指定某些類優(yōu)先啟動

    SpringBoot如何指定某些類優(yōu)先啟動

    這篇文章主要介紹了SpringBoot如何指定某些類優(yōu)先啟動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • mybatis中的count()按條件查詢方式

    mybatis中的count()按條件查詢方式

    這篇文章主要介紹了mybatis中的count()按條件查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Eclipse安裝Aptana插件(注意對應(yīng)版本問題)

    Eclipse安裝Aptana插件(注意對應(yīng)版本問題)

    這篇文章主要為大家詳細(xì)介紹了Eclipse安裝Aptana插件的相關(guān)資料,特別注意對應(yīng)版本問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • java在cmd運行"-d"和"-cp"參數(shù)解讀

    java在cmd運行"-d"和"-cp"參數(shù)解讀

    這篇文章主要介紹了java在cmd運行"-d"和"-cp"參數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Maven的使用和配置國內(nèi)源的保姆級教程

    Maven的使用和配置國內(nèi)源的保姆級教程

    Maven是?個項目管理工具,基于POM(Project Object Model,項目對象模型)的概念,Maven可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的項目管理工具軟件,很多新手還不夠了解maven,所以本文給大家講解Maven的使用和配置,需要的朋友可以參考下
    2025-04-04

最新評論

重庆市| 大丰市| 揭西县| 玉田县| 宝鸡市| 十堰市| 潮安县| 长白| 农安县| 东至县| 固始县| 图们市| 新密市| 亚东县| 封丘县| 潮安县| 曲沃县| 宁安市| 新竹县| 云阳县| 和政县| 克拉玛依市| 敦煌市| 温州市| 揭西县| 大冶市| 通江县| 盐池县| 南丰县| 瓦房店市| 秀山| 丹东市| 三门峡市| 盐城市| 攀枝花市| 兴义市| 淮滨县| 仪陇县| 荃湾区| 老河口市| 泰来县|