欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理詳解

 更新時(shí)間:2024年08月01日 10:22:52   作者:奮斗的狍子007  
在開發(fā)Spring Boot應(yīng)用時(shí),處理響應(yīng)結(jié)果和異常的方式對項(xiàng)目的可維護(hù)性、可擴(kuò)展性和團(tuán)隊(duì)協(xié)作有著至關(guān)重要的影響,統(tǒng)一結(jié)果返回和統(tǒng)一異常處理是提升項(xiàng)目質(zhì)量的關(guān)鍵策略之一,所以本文給大家詳細(xì)介紹了SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理,需要的朋友可以參考下

一、前言

在開發(fā)Spring Boot應(yīng)用時(shí),處理響應(yīng)結(jié)果和異常的方式對項(xiàng)目的可維護(hù)性、可擴(kuò)展性和團(tuán)隊(duì)協(xié)作有著至關(guān)重要的影響。分散的響應(yīng)結(jié)果和異常處理邏輯往往會導(dǎo)致代碼冗余、難以理解和維護(hù)。因此,統(tǒng)一結(jié)果返回和統(tǒng)一異常處理是提升項(xiàng)目質(zhì)量的關(guān)鍵策略之一。

二、統(tǒng)一結(jié)果返回

統(tǒng)一結(jié)果返回通常意味著為所有控制器方法定義一個(gè)標(biāo)準(zhǔn)的響應(yīng)格式。這可以通過創(chuàng)建一個(gè)或多個(gè)響應(yīng)實(shí)體類來實(shí)現(xiàn),這些類包含了狀態(tài)碼、消息和數(shù)據(jù)等通用字段??刂破鞣椒ㄔ谔幚硗陿I(yè)務(wù)邏輯后,會填充這些字段并返回給客戶端。

接下來讓我們一起看看在SpringBoot中如何實(shí)現(xiàn)統(tǒng)一結(jié)果返回。

1. 定義通用的響應(yīng)對象

創(chuàng)建一個(gè)通用響應(yīng)對象,定義成功和失敗的返回場景,并確保該通用返回對象在接口中得到使用。

public class ResponseResult {

    private int code;

    private String message;

    private Object data;

    public static ResponseResult success(Object data) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setData(data);
        responseResult.setCode(ResultEnum.SUCCESS.code);
        return responseResult;
    }

    public static ResponseResult error(ResultEnum resultEnum) {
        return error(resultEnum, resultEnum.message);
    }

    public static ResponseResult error(ResultEnum resultEnum, String message) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(resultEnum.code);
        responseResult.setMessage(message);
        return responseResult;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

2. 定義接口響應(yīng)狀態(tài)碼

定義一組公共狀態(tài)碼是統(tǒng)一結(jié)果返回的核心關(guān)鍵之一。這種做法不僅提高了API的易用性和可維護(hù)性,還使得客戶端能夠更高效地解析和處理響應(yīng)數(shù)據(jù),同時(shí)也為API的開發(fā)者提供了一個(gè)清晰、一致的標(biāo)準(zhǔn)來遵循。

public enum ResultEnum {

    SUCCESS(200 ,"請求處理成功"),
    SERVICE_ERROR(500, "服務(wù)器異常,請稍后重試");

    public final Integer code;

    public final String message;

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

3. 定義統(tǒng)一的成功和失敗的處理方法

public class ResponseResult {

    private int code;

    private String message;

    private Object data;

    public static ResponseResult success(Object data) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setData(data);
        responseResult.setCode(ResultEnum.SUCCESS.code);
        return responseResult;
    }

    public static ResponseResult error(ResultEnum resultEnum) {
        return error(resultEnum, resultEnum.message);
    }

    public static ResponseResult error(ResultEnum resultEnum, String message) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(resultEnum.code);
        responseResult.setMessage(message);
        return responseResult;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

4. Controller統(tǒng)一響應(yīng)結(jié)果

@GetMapping("/testResult")
 public ResponseResult test() {
     // 模擬業(yè)務(wù)邏輯
     try {
         // 假設(shè)這里有一些業(yè)務(wù)邏輯
         return ResponseResult.success("success");
     } catch (Exception e) {
         // 捕獲異常并返回錯(cuò)誤信息
         return ResponseResult.error(ResultEnum.SERVICE_ERROR);
     }
 }

三、統(tǒng)一異常處理

統(tǒng)一異常處理則是通過全局異常處理器來捕獲并處理控制器中拋出的異常。這種方式可以避免在每個(gè)控制器方法中編寫重復(fù)的異常處理代碼,同時(shí)也使得異常處理邏輯更加集中和易于管理。

@RestControllerAdvice

@RestControllerAdvice 是一個(gè)組合注解,它是 @ControllerAdvice 和 @ResponseBody 的結(jié)合體。它主要用于為控制器(Controller)層提供全局的配置,如異常處理、數(shù)據(jù)綁定、數(shù)據(jù)預(yù)處理等。由于它包含了 @ResponseBody,所以所有通過 @RestControllerAdvice 處理的方法都會默認(rèn)將返回值寫入HTTP響應(yīng)體中,并設(shè)置合適的Content-Type。

@ExceptionHandler

@ExceptionHandler注解用于標(biāo)記一個(gè)方法,該方法用于處理控制器中拋出的異常。當(dāng)控制器中的方法拋出異常時(shí),Spring會查找是否有@ExceptionHandler注解的方法能夠處理該異常。如果有,則調(diào)用該方法,并返回其響應(yīng)。

注意

當(dāng)使用@ControllerAdvice時(shí),我們需要將@ResponseBody添加到異常處理方法上。
如果我們使用@RestControllerAdvice,就不需要添加。

1.定義業(yè)務(wù)異常類

統(tǒng)一異常類可以幫助你更好地管理錯(cuò)誤和異常,使得整個(gè)系統(tǒng)的錯(cuò)誤處理更加一致和可預(yù)測。

public class BusinessException extends RuntimeException{

    private final ResultEnum resultEnum;

    public BusinessException(ResultEnum resultEnum, String message) {
        super(message);
        this.resultEnum = resultEnum;
    }

    public BusinessException(ResultEnum resultEnum) {
        this(resultEnum, resultEnum.message);
    }


}

2. 全局異常處理器

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler({BusinessException.class})
    public ResponseResult handleBusinessException(BusinessException businessException, HttpServletRequest request) {
        // 想處理的業(yè)務(wù)
        return ResponseResult.error(ResultEnum.SERVICE_ERROR, businessException.getMessage());
    }

    /**
     * 其他異常
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public ResponseResult handleOtherExceptions(Exception e) {
        // 這里可以根據(jù)不同的異常類型返回不同的狀態(tài)碼和消息
        // 但為了簡單起見,這里只返回一個(gè)通用的錯(cuò)誤信息
        return ResponseResult.error(ResultEnum.SERVICE_ERROR);
    }

}

3. 統(tǒng)一處理使用

@GetMapping("/testException1")
    public ResponseResult test1() {
        if (true) {
            // 業(yè)務(wù)場景
            throw new BusinessException(ResultEnum.SERVICE_ERROR);
        }

        return ResponseResult.success("success");
    }

統(tǒng)一異常處理使用好處

代碼復(fù)用:避免了在多個(gè)地方編寫相似的響應(yīng)結(jié)果和異常處理代碼。

易于維護(hù):當(dāng)需要修改響應(yīng)格式或異常處理邏輯時(shí),只需在一個(gè)地方進(jìn)行修改。

團(tuán)隊(duì)協(xié)作:團(tuán)隊(duì)成員可以更容易地理解和遵循統(tǒng)一的編碼規(guī)范。

擴(kuò)展性:如果需要添加新的響應(yīng)類型或異常處理邏輯,只需在現(xiàn)有基礎(chǔ)上進(jìn)行擴(kuò)展。

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

相關(guān)文章

  • java中的類URL與URLConnection使用介紹

    java中的類URL與URLConnection使用介紹

    這篇文章主要為大家介紹了java中的類URL與URLConnection使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 如何使用lamda表達(dá)式對list進(jìn)行求和

    如何使用lamda表達(dá)式對list進(jìn)行求和

    這篇文章主要介紹了如何使用lamda表達(dá)式對list進(jìn)行求和問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java中的MultipartFile接口和File類解讀

    Java中的MultipartFile接口和File類解讀

    本文主要介紹了Java中的File類和Spring框架中的MultipartFile接口,File類提供了對文件和目錄操作的方法,如創(chuàng)建、刪除、重命名、判斷文件是否存在等,MultipartFile接口用于處理文件上傳,提供了獲取上傳文件信息和保存上傳文件的方法
    2025-02-02
  • Spring boot中Jackson的操作指南

    Spring boot中Jackson的操作指南

    這篇文章主要給大家介紹了關(guān)于Spring boot中Jackson操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java對象轉(zhuǎn)Json,關(guān)于@JSONField對象字段重命名和順序問題

    Java對象轉(zhuǎn)Json,關(guān)于@JSONField對象字段重命名和順序問題

    這篇文章主要介紹了Java對象轉(zhuǎn)Json,關(guān)于@JSONField對象字段重命名和順序問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java繼承的概念及案例解析

    java繼承的概念及案例解析

    這篇文章主要介紹了java繼承的概念及案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java開發(fā)分布式服務(wù)框架Dubbo服務(wù)引用過程詳解

    java開發(fā)分布式服務(wù)框架Dubbo服務(wù)引用過程詳解

    這篇文章主要為大家介紹了java開發(fā)分布式服務(wù)框架Dubbo服務(wù)引用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Java中性能優(yōu)化的35種方法匯總

    Java中性能優(yōu)化的35種方法匯總

    很多同學(xué)在日常寫Java的時(shí)候很少去關(guān)心性能問題,但是在我們寫代碼的過程中必須考慮到性能對程序的影響。小到我們使用位運(yùn)算來實(shí)現(xiàn)算術(shù)運(yùn)算,大到我們對 Java 代碼的總體架構(gòu)設(shè)計(jì),性能其實(shí)離我們很近。本文介紹了Java中性能優(yōu)化的35種方法,需要的朋友可以參考下。
    2017-01-01
  • SpringBoot如何解決跨域Cores問題

    SpringBoot如何解決跨域Cores問題

    這篇文章主要介紹了SpringBoot如何解決跨域Cores問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Spring spel表達(dá)式使用方法示例

    Spring spel表達(dá)式使用方法示例

    這篇文章主要介紹了Spring spel表達(dá)式使用方法示例,通過一些實(shí)例向大家展示了spel表達(dá)式的用法,需要的朋友可以了解下。
    2017-09-09

最新評論