springboot封裝響應(yīng)實體的實例代碼
前言
首先什么是響應(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)文章
IDEA:Git stash 暫存分支修改的實現(xiàn)代碼
這篇文章主要介紹了IDEA:Git stash 暫存分支修改的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03springboot使用Logback把日志輸出到控制臺或輸出到文件
這篇文章給大家介紹springboot項目使用日志工具Logback把日志不僅輸出到控制臺,也可以輸出到文件的操作方法,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-10-10