springboot封裝響應(yīng)實(shí)體的實(shí)例代碼
前言
首先什么是響應(yīng)實(shí)體:
正常我們的后端都是接收前端,然后把請(qǐng)求需要的數(shù)據(jù)返回給前端,而這個(gè)返回的數(shù)據(jù)就是我們的響應(yīng)實(shí)體
那么,為什么我們需要進(jìn)行封裝響應(yīng)實(shí)體呢?
第一點(diǎn),最明顯的就是,為了
人機(jī)友好交互,如果單單只是把返回的數(shù)據(jù)給到前端,有數(shù)據(jù)還好,但是沒(méi)有數(shù)據(jù)的情況下,前端用戶使用的時(shí)候查不到數(shù)據(jù),怎么知道是因?yàn)槭裁丛驔](méi)有數(shù)據(jù)呢?是因?yàn)榇_實(shí)查不到數(shù)據(jù),還是因?yàn)?code>業(yè)務(wù)邏輯卡控查不到數(shù)據(jù),或者說(shuō)代碼邏輯報(bào)錯(cuò)?
第二點(diǎn)的話,是為了保證
類型安全性:使用泛型可以在編譯時(shí)期提供類型檢查,在運(yùn)行時(shí)避免類型錯(cuò)誤。通過(guò)泛型封裝響應(yīng)體,可以確保返回的數(shù)據(jù)類型與期望的類型一致,減少由于類型不匹配而引發(fā)的錯(cuò)誤。
第三點(diǎn),API設(shè)計(jì):使用泛型封裝響應(yīng)體可以提高
API的友好性和一致性。通過(guò)統(tǒng)一的響應(yīng)體封裝,客戶端可以更容易地理解和使用API,并且不需要對(duì)每個(gè)響應(yīng)類型進(jìn)行專門(mén)處理。在大部分的對(duì)外程序里,你如果要使用別人寫(xiě)的程序,調(diào)用對(duì)方的某個(gè)功能,都是看對(duì)方的API接口,看返回和請(qǐng)求的數(shù)據(jù)分別是什么
第四點(diǎn),可復(fù)用性以及擴(kuò)展性:使用泛型封裝響應(yīng)體可以將通用的邏輯和行為與具體的響應(yīng)類型解耦,使其可以
在不同的場(chǎng)景中復(fù)用。這種靈活性可以減少代碼的重復(fù)編寫(xiě),提高代碼的可維護(hù)性和可擴(kuò)展性。泛型封裝響應(yīng)體可以為不同類型的響應(yīng)提供支持,而無(wú)需修改現(xiàn)有的代碼。這種靈活性使得我們可以輕松添加新的響應(yīng)類型,提供更多的選擇和功能
泛型
在上面,我有反復(fù)提到泛型,那么什么是泛型?
在Java語(yǔ)言中,泛型是一種強(qiáng)類型機(jī)制,它允許在定義類、接口和方法時(shí)使用參數(shù)化類型。通過(guò)使用泛型,可以實(shí)現(xiàn)類型的參數(shù)化,在編譯時(shí)進(jìn)行類型檢查,提高代碼的安全性和可維護(hù)性。
說(shuō)了這么多有一些空泛,那么這邊給出具體的實(shí)例作為演示
這里編寫(xiě)了一個(gè)泛型
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)建一個(gè)存儲(chǔ)整數(shù)的Box對(duì)象
Box<Integer> intBox = new Box<>(10);
intBox.setValue(20); // 設(shè)置新的值
int value = intBox.getValue(); // 取得值
// 創(chuàng)建一個(gè)存儲(chǔ)字符串的Box對(duì)象
Box<String> stringBox = new Box<>("Hello");
stringBox.setValue("World"); // 設(shè)置新的值
String str = stringBox.getValue(); // 取得值
}
}在上述中,我們不管是使用Integer還是String類型去存儲(chǔ)數(shù)據(jù),都能夠正常的執(zhí)行因此,泛型表現(xiàn)在:
可接收任意的類型的數(shù)據(jù)
基礎(chǔ)封裝響應(yīng)實(shí)體
以下為響應(yīng)實(shí)體的代碼:
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)實(shí)體并返回
return new Response<>(200, "成功", "響應(yīng)數(shù)據(jù)");
}根據(jù)你對(duì)封裝的響應(yīng)實(shí)體的重載方法,可編寫(xiě)不同的返回值
如:
return new Response<>("響應(yīng)數(shù)據(jù)");
return new Response<>(200, "成功", "響應(yīng)數(shù)據(jù)");
return new Response<>(200, "成功");進(jìn)階封裝響應(yīng)
封裝請(qǐng)求頭和請(qǐng)求數(shù)據(jù)
如果你想封裝為請(qǐng)求頭和請(qǐng)求數(shù)據(jù)分離的形式,可編寫(xiě)代碼如下:
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;
}
// 請(qǐng)求頭,包含響應(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)碼
有的時(shí)候,你不想使用默認(rèn)的響應(yīng)碼對(duì)應(yīng)的響應(yīng)數(shù)據(jù),需要根據(jù)自己的項(xiàng)目自定義響應(yīng)碼。可參考如下
定義枚舉類
// 該注解需要添加lombok
@Getter
public enum ResultCode {
SUCCESS(1000, "操作成功"),
FAILED(1001, "響應(yīng)失敗"),
VALIDATE_FAILED(1002, "參數(shù)校驗(yàn)失敗"),
NO_RESULT(1003, "未查詢到相關(guān)信息"),
MES_ERROR(1004, "未查詢到相關(guān)信息"),
ERROR(5000, "未知錯(cuò)誤"),
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è)注解可自動(dòng)添加構(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);
}使用對(duì)應(yīng)的狀態(tài)碼,會(huì)返回封裝的響應(yīng)提示信息
結(jié)語(yǔ)
以上為springboot進(jìn)行封裝響應(yīng)實(shí)體的代碼
到此這篇關(guān)于springboot封裝響應(yīng)實(shí)體的實(shí)例代碼的文章就介紹到這了,更多相關(guān)springboot封裝響應(yīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Seata?AT模式啟動(dòng)過(guò)程圖文示例詳解
這篇文章主要為大家介紹了Seata?AT模式啟動(dòng)過(guò)程圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
詳解Struts2動(dòng)態(tài)方法調(diào)用
這篇文章主要介紹了詳解Struts2動(dòng)態(tài)方法調(diào)用,涉及調(diào)用方法的代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼
這篇文章主要介紹了IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
springboot使用Logback把日志輸出到控制臺(tái)或輸出到文件
這篇文章給大家介紹springboot項(xiàng)目使用日志工具Logback把日志不僅輸出到控制臺(tái),也可以輸出到文件的操作方法,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-10-10
java shiro實(shí)現(xiàn)退出登陸清空緩存
本篇文章主要介紹了java shiro實(shí)現(xiàn)退出登陸清空緩存,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02

