java方法通用返回結(jié)果集封裝操作
我們?cè)诜庋b方法的時(shí)候,有的時(shí)候除了需要返回?cái)?shù)據(jù)結(jié)果集data,有的時(shí)候需要返回code(或者status) 或者 msg ,
此時(shí)可以采取下面兩種方式進(jìn)行封裝方法的返回值:
一.返回結(jié)果使用HashMap接收
1.方法中的數(shù)據(jù)封裝到hashmap中
public Map<String,Object> result(Object object) { Map<String,Object> result = new HashMap<String, Object>(); result.put("status", "1"); result.put("msg", "成功"); if(條件1不通過校驗(yàn)) { result.put("status", "-1"); result.put("msg", "...."); return result; } if(條件2不通過校驗(yàn)) { result.put("status", "-1"); result.put("msg", "...."); return result; } //封裝返回?cái)?shù)據(jù) Object data = new Object(); result.put("data", data); return result; }
2.方法調(diào)用:
public void test() { Map<String,Object> result = this.result(new Object()); if(!"1".equals(result.get("status").toString())) { //校驗(yàn)不通過 return; }else { //如果校驗(yàn)通過,拿到數(shù)據(jù) Object data = result.get("data"); //TODO } }
二.使用泛型對(duì)象接收
1.通用結(jié)果集封裝
public class Result<T> { private static final String SUCCESS = "1"; private static final String FAIL = "0"; private String code; private String msg; private T Data; public Result(String code) { this.code = code; } public Result(String code, String msg) { super(); this.code = code; this.msg = msg; } public Result(String code, String msg, T data) { super(); this.code = code; this.msg = msg; Data = data; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return Data; } public void setData(T data) { Data = data; } public static <T> Result<T> ok(T object) { return new Result<T>(SUCCESS, "", object); } public static <T> Result<T> ok() { return new Result<T>(SUCCESS); } public static <T> Result<T> nok(String msg) { return new Result<T>(FAIL, msg); } public static <T> Result<T> nok() { return new Result<T>(FAIL); } public static <T> Result<T> nok(String code, String msg) { return new Result<T>(code, msg); } public static <T> Result<T> nok(String code, String msg, T object) { return new Result<T>(code, msg, object); } public boolean isOk() { return Result.equals(getCode()); } }
2.對(duì)應(yīng)需要返回?cái)?shù)據(jù)T data 的 方法
public Result<T> result (Object object) { if(條件1不通過校驗(yàn)) { return Result.nok("。。。");; } if(條件2不通過校驗(yàn)) { return Result.nok("。。。");; } return Result.ok(T); }
3.方法調(diào)用:
public void test { Result<T> result = this.result(object); if(!result.isOk()) { //校驗(yàn)不通過 return; }else { //如果校驗(yàn)通過,拿到數(shù)據(jù) Object data = result.getData(); //TODO } }
補(bǔ)充知識(shí):java后端封裝標(biāo)準(zhǔn)返回類到前端
在日常開發(fā)中,我們后端和前端最好是約定一個(gè)數(shù)據(jù)格式,用于后端封裝好數(shù)據(jù),然后返回前端,前端就可以很簡單地就解析了,下面是我總結(jié)出來經(jīng)常會(huì)那么用的模板,可以參考一下:
1、創(chuàng)建對(duì)象
直接在實(shí)體包下面新建一個(gè)ReturnParam對(duì)象,對(duì)象內(nèi)容包括了是否成功標(biāo)記、list結(jié)果集合、total總數(shù)(用于前端分頁)還有可拓展的其他對(duì)象,直接看代碼吧:
import java.util.List; /** * @Author: John * @Description: 返回前端的統(tǒng)一對(duì)象 * @Date: 2019/8/3 10:03 * @param: null * @return: */ public class ReturnParam<T> { private Boolean success; //請(qǐng)求是否成功 private List<T> list; //結(jié)果的集合 private int total; //結(jié)果的總條數(shù) private Object obj; //其他的對(duì)象,可以使用Map<String, Object>的格式添加 public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } }
2、調(diào)用
在代碼中調(diào)用就會(huì)使用下面的格式調(diào)用,下面附上我的一個(gè)小例子:
package com.tw.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author: John * @Description: 用于測試的接口 * @Date: 2019/8/2 21:44 * @param: null * @return: */ @RequestMapping("/debug") @Controller public class DebugController { //日志 private static Logger logger = LoggerFactory.getLogger(DebugController.class); @GetMapping("/test") public ReturnParam test() { logger.info("============調(diào)用debug的test方法"); //List集合中的數(shù)據(jù) List<String> things = new ArrayList<>(); things.add("apple"); things.add("pear"); things.add("banana"); //添加其他類型1 Map<String, String> sort = new HashMap<>(); sort.put("sort", "fruit"); //添加其他類型的數(shù)據(jù)2 String nama = "John"; int age = 27; //聲明Object對(duì)象,并用于裝其他的東西 Map<String, Object> objectMap = new HashMap<>(); objectMap.put("sort", sort); objectMap.put("name", nama); objectMap.put("age", age); ReturnParam returnParam = new ReturnParam(); returnParam.setSuccess(true); returnParam.setList(things); returnParam.setTotal(things.size()); //obj用于裝qita類型的數(shù)據(jù)統(tǒng)一返回到前端 returnParam.setObj(objectMap); return returnParam; } }
3、返回
查看返回前端的數(shù)據(jù)格式,很干凈,很舒服,很符合有強(qiáng)迫癥的程序員觀看:
4、結(jié)語:
開發(fā)過程中需要多多總結(jié),遇到一些感興趣的東西可以隨手記下來,總比過去了就過去了,什么都不留下來要好很多,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 將文件轉(zhuǎn)為字節(jié)數(shù)組知識(shí)總結(jié)及實(shí)例詳解
這篇文章主要介紹了Java 將文件轉(zhuǎn)為字節(jié)數(shù)組實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12淺談StringEntity 和 UrlEncodedFormEntity之間的區(qū)別
這篇文章主要介紹了StringEntity 和 UrlEncodedFormEntity之間的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例
這篇文章主要給大家介紹了關(guān)于SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)的相關(guān)資料,前端負(fù)責(zé)展示頁面和用戶交互,而后端則負(fù)責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ),在這種架構(gòu)下前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進(jìn)行處理,需要的朋友可以參考下2023-12-12Java?實(shí)現(xiàn)使用Comparable按照我們指定的規(guī)則排序
這篇文章主要介紹了Java?如何使用Comparable按照我們指定的規(guī)則排序,通過練習(xí)創(chuàng)建TreeSet集合使用無參構(gòu)造方法,并按照年齡從小到大的順序排序,若年齡相同再按照姓名的字母順序排序展開內(nèi)容,需要的朋友可以參考一下2022-04-04Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)
數(shù)據(jù)庫表中應(yīng)該都要有create_time、update_time字段;那么在開發(fā)中,對(duì)于這些共有字段的處理應(yīng)該要進(jìn)行統(tǒng)一,這樣就可以簡化我們的開發(fā)過程。那么本文就對(duì)Mybatis-Plus中的字段自動(dòng)填充進(jìn)行記錄2021-11-11Java?map為什么不能遍歷的同時(shí)進(jìn)行增刪操作
這篇文章主要介紹了Java?map為什么不能遍歷的同時(shí)進(jìn)行增刪操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07淺談Spring Boot 開發(fā)REST接口最佳實(shí)踐
這篇文章主要介紹了淺談Spring Boot 開發(fā)REST接口最佳實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01深入理解JAVA基礎(chǔ)類庫中對(duì)象Object類
Object類是一個(gè)特殊的類,是所有類的父類,如果一個(gè)類沒有用extends明確指出繼承于某個(gè)類,那么它默認(rèn)繼承Object類。這里主要總結(jié)Object類中的兩個(gè):toString()與equals()方法2021-09-09Java游戲俄羅斯方塊的實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Java游戲俄羅斯方塊的實(shí)現(xiàn)實(shí)例的相關(guān)資料,這里實(shí)現(xiàn)簡單的俄羅斯方塊幫助大家學(xué)習(xí)理解基礎(chǔ)知識(shí),需要的朋友可以參考下2017-08-08