java中統(tǒng)一返回前端格式及統(tǒng)一結(jié)果處理返回詳解
統(tǒng)一結(jié)果處理
為什么要使用統(tǒng)一結(jié)果?
1、大部分前后端項目采用 JSON 格式進行數(shù)據(jù)交互,定義一個統(tǒng)一的數(shù)據(jù)規(guī)范,有利于前后臺的交互、以及信息處理。
2、Java后端開發(fā)項目時,需要給前端傳一些數(shù)據(jù),可以直接將一個 List 或者 Map 返回給前端,但是這樣會顯得很亂,并且有時候前端需要的不僅僅只是數(shù)據(jù),可能還有一些錯誤碼、錯誤信息等,這時就需要一種規(guī)范的數(shù)據(jù)格式傳到前端。
返回格式的屬性說明
- success: true/false,是否響應成功,設(shè)置成 Boolean 類型。
- code: 200/400/500等,響應狀態(tài)碼。設(shè)置成 Integer 類型。
- message: 訪問成功/系統(tǒng)異常等,狀態(tài)碼描述,設(shè)置成 String 類型。
- data: 處理得數(shù)據(jù),響應數(shù)據(jù),設(shè)置成 HashMap 類型。
下面舉出來一個 Spring Boot 項目中,通過接口返回給前端的結(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)造器私有,不允許進行實例化,但提供靜態(tài)方法:ok、error 返回一個實例
- ok:返回一個 成功操作 的實例對象
- error:返回一個 失敗操作 的實例對象
采用鏈式調(diào)用(即:方法返回對象為其本身,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<>(); // 默認私有構(gòu)造器 private Result(){ } // 自定義構(gòu)造器 private Result(Boolean success, Integer code, String message){ this.success = success; this.code = code; this.message = message; } // 返回一個默認的 成功操作 的實例對象,默認響應狀態(tài)碼 200 public static Result ok(){ // 使用 HttpStatus 的常量表示響應狀態(tài)碼,這個需要導入 httpcore 依賴 return new Result(true, HttpStatus.SC_OK, "success"); } // 返回一個自定義 成功操作 的實例對象 public static Result ok(Boolean success, Integer code, String message) { return new Result(success, code, message); } // 返回一個默認的 失敗操作 的結(jié)果,默認響應狀態(tài)碼為 500 public static Result error() { return new Result(false, HttpStatus.SC_INTERNAL_SERVER_ERROR, "error"); } // 返回一個自定義 失敗操作 的實例對象 public static Result error(Boolean success, Integer code, String message) { return new Result(success, code, message); } // 自定義響應是否成功 public Result success(Boolean success) { this.setSuccess(success); return this; } // 自定義響應狀態(tài)碼 public Result code(Integer code) { this.setCode(code); return this; } // 自定義響應消息 public Result message(String message) { this.setMessage(message); return this; } // 自定義響應數(shù)據(jù),一次設(shè)置一個 map 集合 public Result data(Map<String, Object> map) { this.data.putAll(map); return this; } // 通用設(shè)置響應數(shù)據(jù),一次設(shè)置一個 key - value 鍵值對 public Result data(String key, Object value) { this.data.put(key, value); return this; } }
代碼說明:
1、統(tǒng)一結(jié)果返回類。方法采用鏈式調(diào)用的寫法(即返回類本身 return this)。
2、構(gòu)造器私有,不允許進行實例化,但提供靜態(tài)方法 ok、error 返回一個實例。
3、靜態(tài)方法說明:
- ok: 返回一個 成功操作 的結(jié)果(實例對象)。
- error: 返回一個 失敗操作 的結(jié)果(實例對象)。
4、普通方法說明:
- success: 用于自定義響應是否成功
- code: 用于自定義響應狀態(tài)碼
- message: 用于自定義響應消息
- data: 用于自定義響應數(shù)據(jù)
5、依賴信息說明:
- 此處使用 @Data 注解,需導入 lombok 相關(guān)依賴文件。
- 使用 HttpStatus 的常量表示 響應狀態(tài)碼,需導入 httpcore 相關(guān)依賴文件。
注意:使用 HttpStatus 時,要加這個依賴:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.13(版本號)</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>
4、使用:修改某個 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵
這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵,有興趣的可以了解一下。2017-01-01Java實現(xiàn)直接插入排序與折半插入排序的示例詳解
這篇文章主要為大家詳細介紹了插入排序中兩個常見的排序:直接插入排序與折半插入排序。本文用Java語言實現(xiàn)了這兩個排序算法,感興趣的可以學習一下2022-06-06Java中字節(jié)流和字符流的區(qū)別與聯(lián)系
Java中的字節(jié)流和字符流是用于處理輸入和輸出的兩種不同的流,本文主要介紹了Java中字節(jié)流和字符流的區(qū)別與聯(lián)系,字節(jié)流以字節(jié)為單位進行讀寫,適用于處理二進制數(shù)據(jù),本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2024-12-12mybatis使用foreach遍歷list集合或者array數(shù)組方式
這篇文章主要介紹了mybatis使用foreach遍歷list集合或者array數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07