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

springboot封裝響應(yīng)實體的實例代碼

 更新時間:2023年07月04日 15:09:49   作者:相與還  
這篇文章主要介紹了springboot封裝響應(yīng)實體,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

首先什么是響應(yīng)實體:

正常我們的后端都是接收前端,然后把請求需要的數(shù)據(jù)返回給前端,而這個返回的數(shù)據(jù)就是我們的響應(yīng)實體

那么,為什么我們需要進行封裝響應(yīng)實體呢?

第一點,最明顯的就是,為了人機友好交互,如果單單只是把返回的數(shù)據(jù)給到前端,有數(shù)據(jù)還好,但是沒有數(shù)據(jù)的情況下,前端用戶使用的時候查不到數(shù)據(jù),怎么知道是因為什么原因沒有數(shù)據(jù)呢?是因為確實查不到數(shù)據(jù),還是因為業(yè)務(wù)邏輯卡控查不到數(shù)據(jù),或者說代碼邏輯報錯?

第二點的話,是為了保證類型安全性:使用泛型可以在編譯時期提供類型檢查,在運行時避免類型錯誤。通過泛型封裝響應(yīng)體,可以確保返回的數(shù)據(jù)類型與期望的類型一致,減少由于類型不匹配而引發(fā)的錯誤。

第三點,API設(shè)計:使用泛型封裝響應(yīng)體可以提高API的友好性和一致性。通過統(tǒng)一的響應(yīng)體封裝,客戶端可以更容易地理解和使用API,并且不需要對每個響應(yīng)類型進行專門處理。在大部分的對外程序里,你如果要使用別人寫的程序,調(diào)用對方的某個功能,都是看對方的API接口,看返回和請求的數(shù)據(jù)分別是什么

第四點,可復(fù)用性以及擴展性:使用泛型封裝響應(yīng)體可以將通用的邏輯和行為與具體的響應(yīng)類型解耦,使其可以在不同的場景中復(fù)用。這種靈活性可以減少代碼的重復(fù)編寫,提高代碼的可維護性和可擴展性。泛型封裝響應(yīng)體可以為不同類型的響應(yīng)提供支持,而無需修改現(xiàn)有的代碼。這種靈活性使得我們可以輕松添加新的響應(yīng)類型,提供更多的選擇和功能

泛型

在上面,我有反復(fù)提到泛型,那么什么是泛型?

在Java語言中,泛型是一種強類型機制,它允許在定義類、接口和方法時使用參數(shù)化類型。通過使用泛型,可以實現(xiàn)類型的參數(shù)化,在編譯時進行類型檢查,提高代碼的安全性和可維護性。

說了這么多有一些空泛,那么這邊給出具體的實例作為演示

這里編寫了一個泛型

public class Box<T> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
    public void setValue(T value) {
        this.value = value;
    }
}

使用

public class GenericExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個存儲整數(shù)的Box對象
        Box<Integer> intBox = new Box<>(10);
        intBox.setValue(20); // 設(shè)置新的值
        int value = intBox.getValue(); // 取得值
        // 創(chuàng)建一個存儲字符串的Box對象
        Box<String> stringBox = new Box<>("Hello");
        stringBox.setValue("World"); // 設(shè)置新的值
        String str = stringBox.getValue(); // 取得值
    }
}

在上述中,我們不管是使用Integer還是String類型去存儲數(shù)據(jù),都能夠正常的執(zhí)行因此,泛型表現(xiàn)在:可接收任意的類型的數(shù)據(jù)

基礎(chǔ)封裝響應(yīng)實體

以下為響應(yīng)實體的代碼:

public class Response<T> {
	// 狀態(tài)碼
    private int statusCode;
    // 響應(yīng)信息提示
    private String message;
    // 響應(yīng)數(shù)據(jù)
    private T data;
    // 構(gòu)造函數(shù)
    public Response(int statusCode, String message, T data) {
        this.statusCode = statusCode;
        this.message = message;
        this.data = data;
    }
    // Getter和Setter方法
    // 狀態(tài)碼
    public int getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }
    // 響應(yīng)信息提示
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    // 響應(yīng)數(shù)據(jù)
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}

使用

public Response<String> Method1(String val) {
    // 執(zhí)行邏輯,獲取數(shù)據(jù)
    // 封裝響應(yīng)實體并返回
    return new Response<>(200, "成功", "響應(yīng)數(shù)據(jù)");
}

根據(jù)你對封裝的響應(yīng)實體的重載方法,可編寫不同的返回值

如:

return new Response<>("響應(yīng)數(shù)據(jù)");
return new Response<>(200, "成功", "響應(yīng)數(shù)據(jù)");
return new Response<>(200, "成功");

進階封裝響應(yīng)

封裝請求頭和請求數(shù)據(jù)

如果你想封裝為請求頭和請求數(shù)據(jù)分離的形式,可編寫代碼如下:

public class Response<T> {
  public Header header;
  public T value;
  public Response() {
  }
  public Response(T value) {
    this.header = new Header();
    this.value = value;
  }
  public Response(int code, Exception ex) {
    if (ex.getMessage() == null) {
      this.header = new Header(code, ex.toString());
    } else {
      this.header = new Header(code, ex.getMessage());
    }
    this.value = null;
  }
  public Response(int code, String message) {
    this.header = new Header(code, message);
    this.value = null;
  }
  public Response(int code, T value, Exception ex) {
    if (ex.getMessage() == null) {
      this.header = new Header(code, ex.toString());
    } else {
      this.header = new Header(code, ex.getMessage());
    }
    this.value = value;
  }
  public Response(int code, T value, String message) {
    this.header = new Header(code, message);
    this.value = value;
  }
// 請求頭,包含響應(yīng)碼和響應(yīng)提醒信息
  public static class Header {
    public int code;
    public String message;
    public Header() {
      this.code = 0;
      this.message = "";
    }
    public Header(int code, String message) {
      this.code = code;
      this.message = message;
    }
  }
}

自定義響應(yīng)碼

有的時候,你不想使用默認(rèn)的響應(yīng)碼對應(yīng)的響應(yīng)數(shù)據(jù),需要根據(jù)自己的項目自定義響應(yīng)碼??蓞⒖既缦?/p>

定義枚舉類

// 該注解需要添加lombok
@Getter
public enum ResultCode {
    SUCCESS(1000, "操作成功"),
    FAILED(1001, "響應(yīng)失敗"),
    VALIDATE_FAILED(1002, "參數(shù)校驗失敗"),
    NO_RESULT(1003, "未查詢到相關(guān)信息"),
    MES_ERROR(1004, "未查詢到相關(guān)信息"),
    ERROR(5000, "未知錯誤"),
    FILE_UPLOAD_ERROR(5001, "文件上傳失敗");
    private int code;
    private String msg;
    ResultCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

響應(yīng)體

@Getter
// 這兩個注解可自動添加構(gòu)造函數(shù)
@AllArgsConstructor
@NoArgsConstructor
public class Response<T> {
	// 響應(yīng)碼
    private int code;
    //	響應(yīng)提示信息
    private String msg;
    // 響應(yīng)數(shù)據(jù)
    private T data;
    public Response(T data) {
        this(ResultCode.SUCCESS, data);
    }
    public Response(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Response(ResultCode resultCode, T data) {
        this.code = resultCode.getCode();
        this.msg = resultCode.getMsg();
        this.data = data;
    }
}

使用

    public ResultVO Method1(){
        // 執(zhí)行邏輯
        return new ResultVO(ResultCode.SUCCESS);
    }

使用對應(yīng)的狀態(tài)碼,會返回封裝的響應(yīng)提示信息

結(jié)語

以上為springboot進行封裝響應(yīng)實體的代碼

到此這篇關(guān)于springboot封裝響應(yīng)實體的實例代碼的文章就介紹到這了,更多相關(guān)springboot封裝響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Seata?AT模式啟動過程圖文示例詳解

    Seata?AT模式啟動過程圖文示例詳解

    這篇文章主要為大家介紹了Seata?AT模式啟動過程圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • LinkedHashMap如何保證有序問題

    LinkedHashMap如何保證有序問題

    這篇文章主要介紹了LinkedHashMap如何保證有序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解Struts2動態(tài)方法調(diào)用

    詳解Struts2動態(tài)方法調(diào)用

    這篇文章主要介紹了詳解Struts2動態(tài)方法調(diào)用,涉及調(diào)用方法的代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • IDEA:Git stash 暫存分支修改的實現(xiàn)代碼

    IDEA:Git stash 暫存分支修改的實現(xiàn)代碼

    這篇文章主要介紹了IDEA:Git stash 暫存分支修改的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Java 深入淺出掌握Collection單列集合Set

    Java 深入淺出掌握Collection單列集合Set

    Collection集合類是單列集合類的根接口,用來存儲一系列符合某種規(guī)則的元素。List接口和Set接口是Collection集合類的子接口,其中List接口的常用實現(xiàn)類有ArrayList類、Vector類和LinkedList類;Set接口的常用實現(xiàn)類有HashSet類和TreeSet類
    2021-11-11
  • springboot使用Logback把日志輸出到控制臺或輸出到文件

    springboot使用Logback把日志輸出到控制臺或輸出到文件

    這篇文章給大家介紹springboot項目使用日志工具Logback把日志不僅輸出到控制臺,也可以輸出到文件的操作方法,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • java shiro實現(xiàn)退出登陸清空緩存

    java shiro實現(xiàn)退出登陸清空緩存

    本篇文章主要介紹了java shiro實現(xiàn)退出登陸清空緩存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 如何理解和運用ClassLoader

    如何理解和運用ClassLoader

    這篇文章主要介紹了如何理解和運用 ClassLoader,幫助大家更好的理解和使用JVM,感興趣的朋友可以了解下
    2021-01-01
  • 淺析JDBC的使用方法

    淺析JDBC的使用方法

    這篇文章主要介紹了JDBC的使用方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • 一文帶你徹底剖析Java中Synchronized原理

    一文帶你徹底剖析Java中Synchronized原理

    Synchronized是Java中的隱式鎖,它的獲取鎖和釋放鎖都是隱式的,完全交由JVM幫助我們操作,在了解Synchronized關(guān)鍵字之前,首先要學(xué)習(xí)的知識點就是Java的對象結(jié)構(gòu),本文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評論