java方法通用返回结果集封装操作

时间:2021-05-19

我们在封装方法的时候,有的时候除了需要返回数据结果集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", "-1"); result.put("msg", "...."); 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, String msg, 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")@Controllerpublic 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、结语:

开发过程中需要多多总结,遇到一些感兴趣的东西可以随手记下来,总比过去了就过去了,什么都不留下来要好很多,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章