java方法通用返回結(jié)果集封裝操作
我們在封裝方法的時(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
}
}
二.使用泛型對象接收
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.對應(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ǔ)充知識:java后端封裝標(biāo)準(zhǔn)返回類到前端
在日常開發(fā)中,我們后端和前端最好是約定一個(gè)數(shù)據(jù)格式,用于后端封裝好數(shù)據(jù),然后返回前端,前端就可以很簡單地就解析了,下面是我總結(jié)出來經(jīng)常會那么用的模板,可以參考一下:
1、創(chuàng)建對象
直接在實(shí)體包下面新建一個(gè)ReturnParam對象,對象內(nèi)容包括了是否成功標(biāo)記、list結(jié)果集合、total總數(shù)(用于前端分頁)還有可拓展的其他對象,直接看代碼吧:
import java.util.List;
/**
* @Author: John
* @Description: 返回前端的統(tǒng)一對象
* @Date: 2019/8/3 10:03
* @param: null
* @return:
*/
public class ReturnParam<T> {
private Boolean success; //請求是否成功
private List<T> list; //結(jié)果的集合
private int total; //結(jié)果的總條數(shù)
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、調(diào)用
在代碼中調(diào)用就會使用下面的格式調(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對象,并用于裝其他的東西
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 Web監(jiān)聽器如何實(shí)現(xiàn)定時(shí)發(fā)送郵件
這篇文章主要介紹了Java Web監(jiān)聽器如何實(shí)現(xiàn)定時(shí)發(fā)送郵件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Java 線程的優(yōu)先級(setPriority)案例詳解
這篇文章主要介紹了Java 線程的優(yōu)先級(setPriority)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Java實(shí)現(xiàn)CORS跨域請求的實(shí)現(xiàn)方法
本篇文章主要介紹了Java實(shí)現(xiàn)CORS跨域請求的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Spring動態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離詳解
這篇文章主要為大家詳細(xì)介紹了Spring動態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
java集成開發(fā)SpringBoot生成接口文檔示例實(shí)現(xiàn)
這篇文章主要為大家介紹了java集成開發(fā)SpringBoot如何生成接口文檔的示例實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器
這篇文章主要介紹了Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Java中Socket設(shè)置連接超時(shí)的代碼分享
在我們?nèi)粘_B接中,如果超時(shí)時(shí)長過長的話,在開發(fā)時(shí)會影響測試,下面這篇文章主要給大家分享了關(guān)于Java中Socket設(shè)置連接超時(shí)的代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06

