java中統(tǒng)一返回前端格式及統(tǒng)一結(jié)果處理返回詳解
統(tǒng)一結(jié)果處理
為什么要使用統(tǒng)一結(jié)果?
1、大部分前后端項(xiàng)目采用 JSON 格式進(jìn)行數(shù)據(jù)交互,定義一個(gè)統(tǒng)一的數(shù)據(jù)規(guī)范,有利于前后臺(tái)的交互、以及信息處理。
2、Java后端開(kāi)發(fā)項(xiàng)目時(shí),需要給前端傳一些數(shù)據(jù),可以直接將一個(gè) List 或者 Map 返回給前端,但是這樣會(huì)顯得很亂,并且有時(shí)候前端需要的不僅僅只是數(shù)據(jù),可能還有一些錯(cuò)誤碼、錯(cuò)誤信息等,這時(shí)就需要一種規(guī)范的數(shù)據(jù)格式傳到前端。
返回格式的屬性說(shuō)明
- success: true/false,是否響應(yīng)成功,設(shè)置成 Boolean 類型。
- code: 200/400/500等,響應(yīng)狀態(tài)碼。設(shè)置成 Integer 類型。
- message: 訪問(wèn)成功/系統(tǒng)異常等,狀態(tài)碼描述,設(shè)置成 String 類型。
- data: 處理得數(shù)據(jù),響應(yīng)數(shù)據(jù),設(shè)置成 HashMap 類型。
下面舉出來(lái)一個(gè) Spring Boot 項(xiàng)目中,通過(guò)接口返回給前端的結(jié)果格式示例:
// 舉例:返回結(jié)果樣式
{
"success": true,
"code": 200,
"message": "查詢用戶列表",
"data": {
"itms": [
{
"id": "1",
"username": "admin",
"role": "ADMIN",
"createTime": "2020-4-24T15:32:29",
"modifiedTime": "2020-4-24T15:41:40"
},{
"id": "2",
"username": "zhangsan",
"role": "USER",
"createTime": "2020-4-24T15:32:29",
"modifiedTime": "2020-4-24T15:41:40"
}
]
}
}
統(tǒng)一結(jié)果返回類如何定義
構(gòu)造器私有,不允許進(jìn)行實(shí)例化,但提供靜態(tài)方法:ok、error 返回一個(gè)實(shí)例
- ok:返回一個(gè) 成功操作 的實(shí)例對(duì)象
- error:返回一個(gè) 失敗操作 的實(shí)例對(duì)象
采用鏈?zhǔn)秸{(diào)用(即:方法返回對(duì)象為其本身,return this)----> 下面代碼中涉及到
統(tǒng)一結(jié)果返回類:
@Data
public class Result {
private Boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new HashMap<>();
// 默認(rèn)私有構(gòu)造器
private Result(){
}
// 自定義構(gòu)造器
private Result(Boolean success, Integer code, String message){
this.success = success;
this.code = code;
this.message = message;
}
// 返回一個(gè)默認(rèn)的 成功操作 的實(shí)例對(duì)象,默認(rèn)響應(yīng)狀態(tài)碼 200
public static Result ok(){
// 使用 HttpStatus 的常量表示響應(yīng)狀態(tài)碼,這個(gè)需要導(dǎo)入 httpcore 依賴
return new Result(true, HttpStatus.SC_OK, "success");
}
// 返回一個(gè)自定義 成功操作 的實(shí)例對(duì)象
public static Result ok(Boolean success, Integer code, String message) {
return new Result(success, code, message);
}
// 返回一個(gè)默認(rèn)的 失敗操作 的結(jié)果,默認(rèn)響應(yīng)狀態(tài)碼為 500
public static Result error() {
return new Result(false, HttpStatus.SC_INTERNAL_SERVER_ERROR, "error");
}
// 返回一個(gè)自定義 失敗操作 的實(shí)例對(duì)象
public static Result error(Boolean success, Integer code, String message) {
return new Result(success, code, message);
}
// 自定義響應(yīng)是否成功
public Result success(Boolean success) {
this.setSuccess(success);
return this;
}
// 自定義響應(yīng)狀態(tài)碼
public Result code(Integer code) {
this.setCode(code);
return this;
}
// 自定義響應(yīng)消息
public Result message(String message) {
this.setMessage(message);
return this;
}
// 自定義響應(yīng)數(shù)據(jù),一次設(shè)置一個(gè) map 集合
public Result data(Map<String, Object> map) {
this.data.putAll(map);
return this;
}
// 通用設(shè)置響應(yīng)數(shù)據(jù),一次設(shè)置一個(gè) key - value 鍵值對(duì)
public Result data(String key, Object value) {
this.data.put(key, value);
return this;
}
}
代碼說(shuō)明:
1、統(tǒng)一結(jié)果返回類。方法采用鏈?zhǔn)秸{(diào)用的寫法(即返回類本身 return this)。
2、構(gòu)造器私有,不允許進(jìn)行實(shí)例化,但提供靜態(tài)方法 ok、error 返回一個(gè)實(shí)例。
3、靜態(tài)方法說(shuō)明:
- ok: 返回一個(gè) 成功操作 的結(jié)果(實(shí)例對(duì)象)。
- error: 返回一個(gè) 失敗操作 的結(jié)果(實(shí)例對(duì)象)。
4、普通方法說(shuō)明:
- success: 用于自定義響應(yīng)是否成功
- code: 用于自定義響應(yīng)狀態(tài)碼
- message: 用于自定義響應(yīng)消息
- data: 用于自定義響應(yīng)數(shù)據(jù)
5、依賴信息說(shuō)明:
- 此處使用 @Data 注解,需導(dǎo)入 lombok 相關(guān)依賴文件。
- 使用 HttpStatus 的常量表示 響應(yīng)狀態(tài)碼,需導(dǎo)入 httpcore 相關(guān)依賴文件。
注意:使用 HttpStatus 時(shí),要加這個(gè)依賴:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.13(版本號(hào))</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
4、使用:修改某個(gè) controller 如下所示:
@GetMapping("selectOne")
public Result selectOne(Integer id) {
Emp emp = this.empService.queryById(id);
if (emp == null) {
return Result.error().message("用戶不存在");
}
return Result.ok().data("items", emp).message("查詢成功");
}

4.1 成功:若查詢用戶成功,調(diào)用 ok 返回查詢到的結(jié)果。
{
"success": true,
"code": 200,
"message": "查詢成功",
"data": {
"items": {
"id": 1,
"name": "tom",
"salary": 6000.0,
"age": 20,
"email": "tom@163.com"
}
}
}
4.2 失?。喝舨樵冇脩羰。{(diào)用 error 返回查詢失敗信息。
{
"success": false,
"code": 500,
"message": "用戶不存在",
"data": {}
}
總結(jié)
到此這篇關(guān)于java中統(tǒng)一返回前端格式及統(tǒng)一結(jié)果處理返回的文章就介紹到這了,更多相關(guān)java統(tǒng)一結(jié)果處理返回內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵
這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵,有興趣的可以了解一下。2017-01-01
Spring前后端跨域請(qǐng)求設(shè)置代碼實(shí)例
這篇文章主要介紹了Spring前后端跨域請(qǐng)求設(shè)置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Java實(shí)現(xiàn)直接插入排序與折半插入排序的示例詳解
這篇文章主要為大家詳細(xì)介紹了插入排序中兩個(gè)常見(jiàn)的排序:直接插入排序與折半插入排序。本文用Java語(yǔ)言實(shí)現(xiàn)了這兩個(gè)排序算法,感興趣的可以學(xué)習(xí)一下2022-06-06
Java中字節(jié)流和字符流的區(qū)別與聯(lián)系
Java中的字節(jié)流和字符流是用于處理輸入和輸出的兩種不同的流,本文主要介紹了Java中字節(jié)流和字符流的區(qū)別與聯(lián)系,字節(jié)流以字節(jié)為單位進(jìn)行讀寫,適用于處理二進(jìn)制數(shù)據(jù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-12-12
mybatis使用foreach遍歷list集合或者array數(shù)組方式
這篇文章主要介紹了mybatis使用foreach遍歷list集合或者array數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
詳解Java如何實(shí)現(xiàn)企業(yè)微信審批流程
這篇文章主要使用了一個(gè)Java示例代碼,來(lái)向大家展示如何在企業(yè)微信中實(shí)現(xiàn)審批流程,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以參考下2024-11-11

