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

SpringBoot實現(xiàn)全局異常的封裝和統(tǒng)一處理

 更新時間:2023年12月12日 08:10:31   作者:程序員無名  
在Spring Boot應(yīng)用中,全局異常的處理是一個非常重要的方面,本文主要為大家詳細(xì)介紹了如何在Spring Boot中進(jìn)行全局異常的封裝和統(tǒng)一處理,需要的可以參考下

前言

在Spring Boot應(yīng)用中,全局異常的處理是一個非常重要的方面,它可以提高系統(tǒng)的穩(wěn)定性和用戶體驗。在這篇博客中,我們將介紹如何在Spring Boot中進(jìn)行全局異常的封裝和統(tǒng)一處理。

全局異常處理能夠捕獲應(yīng)用中所有未處理的異常,統(tǒng)一進(jìn)行處理,防止異常信息泄露到客戶端,同時也能夠記錄異常信息以便后續(xù)的調(diào)試和分析。

接下來就用SpringBoot實例代碼實現(xiàn)一個簡單的全局異常攔截。

創(chuàng)建全局異常類

首先,我們需要創(chuàng)建一個自定義的全局異常類,繼承自RuntimeException,用于封裝業(yè)務(wù)異常信息。

/**
可直接進(jìn)行throw該異常類進(jìn)行返回信息
**/
public class CustomException extends RuntimeException {
    //錯誤碼枚舉
    private final ErrorCode errorCode;

    public CustomException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.errorCode = errorCode;
    }

    public ErrorCode getErrorCode() {
        return errorCode;
    }
}

創(chuàng)建錯誤碼枚舉

為了更好地封裝異常信息,我們創(chuàng)建一個錯誤碼的枚舉類,用于定義異常碼和異常信息。

public enum ErrorCode {
    SUCCESS("10000", "success"),
    SYSTEM_ERROR("500", "系統(tǒng)系統(tǒng),請聯(lián)系管理員"),
    NOT_FOUNT("404","未找到對應(yīng)的資源");

    // 其他錯誤碼...

    private final String code;
    private final String message;

    ErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

創(chuàng)建全局異常處理器

然后,我們創(chuàng)建一個全局異常處理器,使用@ControllerAdvice注解,配合@ExceptionHandler注解處理各種異常。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<Response> handleCustomException(CustomException ex) {
        ErrorCode errorCode = ex.getErrorCode();
        return new ResponseEntity<>(Response.error(errorCode.getCode(), errorCode.getMessage()), HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Response> handleOtherExceptions(Exception ex) {
        return new ResponseEntity<>(Response.error(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

創(chuàng)建錯誤響應(yīng)類

最后,我們創(chuàng)建一個錯誤響應(yīng)類,用于返回統(tǒng)一的錯誤格式。

@Data
public class Response<T> {
    private  String code;
    private  String message;
    private T data;
    //默認(rèn)的返回成功
    public static Response success(){
        Response response  =new Response();
        response.setCode(ErrorCode.SUCCESS.getCode());
        response.setMessage(ErrorCode.SUCCESS.getMessage());
        return response;
    }
    //帶內(nèi)容的返回成功
    public static <T> Response success(T data){
        Response<T> response  =new Response<T>();
        response.setCode(ErrorCode.SUCCESS.getCode());
        response.setData(data);
        response.setMessage(ErrorCode.SUCCESS.getMessage());
        return response;
    }
    //默認(rèn)的返回失敗
    public static Response error(){
        Response response  =new Response();
        response.setCode(ErrorCode.SYSTEM_ERROR.getCode());
        response.setMessage(ErrorCode.SYSTEM_ERROR.getMessage());
        return response;
    }
    //自定義的返回失敗
    public static Response error(String code,String msg){
        Response response  =new Response();
        response.setCode(code);
        response.setMessage(msg);
        return response;
    }
}

測試

現(xiàn)在,我們可以在業(yè)務(wù)代碼中通過拋出CustomException來觸發(fā)全局異常處理,例如:

@RestController
@RequestMapping("/api/test")
public class TestConroller {
    @GetMapping("/success")
    public ResponseEntity<Response> successObj(){
        return ResponseEntity.ok(Response.success("111111"));
    }
    @GetMapping("/error")
    public ResponseEntity<Response> error(String name) {
    //傳入的name等于張三時,拋出我們的異常處理。
        if(StringUtils.equals(name,"zhangsan")){
            throw new CustomException(ErrorCode.SYSTEM_ERROR);
        }
        return ResponseEntity.ok(Response.success());
    }
}    

訪問:/api/test/success 返回:

{
"code": "10000",
"message": "success",
"data": "111111"
}

訪問:/api/test/error?name=zhangsan 返回:

{
"code": "500",
"message": "系統(tǒng)系統(tǒng),請聯(lián)系管理員",
"data": null
}

通過以上步驟,我們成功地封裝了全局異常并進(jìn)行了統(tǒng)一處理。這種方式不僅提高了代碼的可維護(hù)性,還使得異常信息的格式更加一致,方便客戶端或其他系統(tǒng)進(jìn)行處理。全局異常處理是一個非常值得關(guān)注的話題,尤其是在構(gòu)建健壯的后端應(yīng)用時。

到此這篇關(guān)于SpringBoot實現(xiàn)全局異常的封裝和統(tǒng)一處理的文章就介紹到這了,更多相關(guān)SpringBoot全局異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springmvc+Hibernate+JPA(混合事務(wù))解讀

    springmvc+Hibernate+JPA(混合事務(wù))解讀

    在Spring項目中,Spring Data JPA作為一種持久層框架,因其簡化數(shù)據(jù)庫操作而受到青睞,但在將其引入使用Hibernate的舊項目時,可能會遇到事務(wù)處理問題,解決方案包括配置兩種事務(wù)管理器:Hibernate事務(wù)管理器和JPA事務(wù)管理器
    2024-09-09
  • Java AQS中CyclicBarrier回環(huán)柵欄的使用

    Java AQS中CyclicBarrier回環(huán)柵欄的使用

    這篇文章主要介紹了Java中的 CyclicBarrier詳解,CyclicBarrier沒有顯示繼承哪個父類或者實現(xiàn)哪個父接口, 所有AQS和重入鎖不是通過繼承實現(xiàn)的,而是通過組合實現(xiàn)的,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2023-02-02
  • Java可變參數(shù)的應(yīng)用小結(jié)

    Java可變參數(shù)的應(yīng)用小結(jié)

    這篇文章主要介紹了Java可變參數(shù)的應(yīng)用小結(jié),實現(xiàn)同一個函數(shù)名,不同參數(shù)個數(shù),實現(xiàn)的方法相同,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • java之Synchronized與Lock使用及說明

    java之Synchronized與Lock使用及說明

    Synchronized和Lock都是Java中用于實現(xiàn)線程同步的機(jī)制,但它們在實現(xiàn)方式、使用方式以及提供的特性上存在顯著的區(qū)別,Synchronized是Java語言內(nèi)置的同步機(jī)制,基于監(jiān)視器鎖(monitorlock)或?qū)ο箧i實現(xiàn),Lock是Java5中引入的一個接口,提供了比synchronized更靈活的鎖操作
    2026-01-01
  • Mybatis兩級緩存可能導(dǎo)致的問題詳細(xì)講解

    Mybatis兩級緩存可能導(dǎo)致的問題詳細(xì)講解

    MyBatis作為一款流行的持久層框架,在數(shù)據(jù)處理和緩存管理方面有著廣泛的應(yīng)用,其中,二級緩存作為其重要的緩存機(jī)制,對于提升應(yīng)用性能具有重要作用,但同時也存在一些潛在的問題,這篇文章主要介紹了Mybatis兩級緩存可能導(dǎo)致問題的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • Java分布式鎖理論(redis、zookeeper))案例詳解

    Java分布式鎖理論(redis、zookeeper))案例詳解

    zookeeper有個節(jié)點(diǎn)路徑的概念,節(jié)點(diǎn)路徑不能重復(fù),保證了唯一性,這篇文章給大家介紹Java分布式鎖理論(redis、zookeeper)?案例詳解,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Java設(shè)計模式之工廠方法和抽象工廠

    Java設(shè)計模式之工廠方法和抽象工廠

    本文詳細(xì)講解了Java設(shè)計模式之工廠方法和抽象工廠,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Spring框架中的JdbcTemplate

    Spring框架中的JdbcTemplate

    這篇文章主要介紹了Spring框架中的JdbcTemplate相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • springboot?整合hbase的示例代碼

    springboot?整合hbase的示例代碼

    這篇文章主要介紹了springboot?整合hbase的示例代碼,本篇詳細(xì)總結(jié)了hbase的Java客戶端的使用,在實際開發(fā)過程中,還需要結(jié)合自身的情況做更加細(xì)致的整合與優(yōu)化,需要的朋友可以參考下
    2022-04-04
  • Java單例模式分析

    Java單例模式分析

    這篇文章主要給大家介紹了關(guān)于Java單例模式,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評論

秦皇岛市| 屯昌县| 志丹县| 崇礼县| 礼泉县| 尉犁县| 图片| 罗城| 沅江市| 宜川县| 贵南县| 花莲市| 秦皇岛市| 扎赉特旗| 长子县| 武强县| 苗栗市| 绵竹市| 南雄市| 嘉祥县| 叙永县| 舒城县| 青岛市| 抚宁县| 水富县| 昆明市| 临邑县| 鄂温| 宁乡县| 平阳县| 同心县| 武威市| 昌宁县| 榆社县| 那曲县| 连江县| 潍坊市| 赫章县| 安平县| 石门县| 宁晋县|