java方法通用返回結果集封裝操作
阿新 • • 發佈:2020-08-24
我們在封裝方法的時候,有的時候除了需要返回資料結果集data,有的時候需要返回code(或者status) 或者 msg,
此時可以採取下面兩種方式進行封裝方法的返回值:
一.返回結果使用HashMap接收
1.方法中的資料封裝到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不通過校驗) { result.put("status","-1"); result.put("msg","...."); return result; } if(條件2不通過校驗) { result.put("status","...."); return result; } //封裝返回資料 Object data = new Object(); result.put("data",data); return result; }
2.方法呼叫:
public void test() { Map<String,Object> result = this.result(new Object()); if(!"1".equals(result.get("status").toString())) { //校驗不通過 return; }else { //如果校驗通過,拿到資料 Object data = result.get("data"); //TODO } }
二.使用泛型物件接收
1.通用結果集封裝
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,T object) { return new Result<T>(code,msg,object); } public boolean isOk() { return Result.equals(getCode()); } }
2.對應需要返回資料T data 的 方法
public Result<T> result (Object object) { if(條件1不通過校驗) { return Result.nok("。。。");; } if(條件2不通過校驗) { return Result.nok("。。。");; } return Result.ok(T); }
3.方法呼叫:
public void test { Result<T> result = this.result(object); if(!result.isOk()) { //校驗不通過 return; }else { //如果校驗通過,拿到資料 Object data = result.getData(); //TODO } }
補充知識:java後端封裝標準返回類到前端
在日常開發中,我們後端和前端最好是約定一個數據格式,用於後端封裝好資料,然後返回前端,前端就可以很簡單地就解析了,下面是我總結出來經常會那麼用的模板,可以參考一下:
1、建立物件
直接在實體包下面新建一個ReturnParam物件,物件內容包括了是否成功標記、list結果集合、total總數(用於前端分頁)還有可拓展的其他物件,直接看程式碼吧:
import java.util.List; /** * @Author: John * @Description: 返回前端的統一物件 * @Date: 2019/8/3 10:03 * @param: null * @return: */ public class ReturnParam<T> { private Boolean success; //請求是否成功 private List<T> list; //結果的集合 private int total; //結果的總條數 private Object obj; //其他的物件,可以使用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、呼叫
在程式碼中呼叫就會使用下面的格式呼叫,下面附上我的一個小例子:
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("============呼叫debug的test方法"); //List集合中的資料 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"); //新增其他型別的資料2 String nama = "John"; int age = 27; //宣告Object物件,並用於裝其他的東西 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型別的資料統一返回到前端 returnParam.setObj(objectMap); return returnParam; } }
3、返回
檢視返回前端的資料格式,很乾淨,很舒服,很符合有強迫症的程式設計師觀看:
4、結語:
開發過程中需要多多總結,遇到一些感興趣的東西可以隨手記下來,總比過去了就過去了,什麼都不留下來要好很多,希望能給大家一個參考,也希望大家多多支援我們。