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

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

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

(0)

相关推荐

  • Java返回分页结果集的封装代码实例

    这篇文章主要介绍了java返回分页结果集的封装代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 package com.leyou.common; import java.util.List; public class PageResult<T> { private long total;//总条数 private Integer totalPage;//总页数 private List<T> list; publ

  • java实现将结果集封装到List中的方法

    本文实例讲述了java实现将结果集封装到List中的方法.分享给大家供大家参考,具体如下: import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class TestResultSet { public stati

  • 使用java反射将结果集封装成为对象和对象集合操作

    java反射机制是什么 反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法: 反射机制能够做什么 1.判断运行对象的所属类 2.构造任意一个类的对象 3.获取任意一个类的属性和方法 4.调用任意属性和方法 5.生成动态代理 利用反射将结果集封装成为对象或者集合(实测可用) package coral.base.util; import java.beans.IntrospectionException; import java.beans.PropertyDescri

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

    我们在封装方法的时候,有的时候除了需要返回数据结果集data,有的时候需要返回code(或者status) 或者 msg , 此时可以采取下面两种方式进行封装方法的返回值: 一.返回结果使用HashMap接收 1.方法中的数据封装到hashmap中 public Map<String,Object> result(Object object) { Map<String,Object> result = new HashMap<String, Object>(); res

  • Java实现Http工具类的封装操作示例

    本文实例讲述了Java实现Http工具类的封装操作.分享给大家供大家参考,具体如下: http工具类的实现:(通过apache包)第一个类 import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolE

  • DWR中各种java方法的调用

    DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都只是某种方法的调用,本文只在使用层面上介绍DWR,并不涉更多的技术与设计,其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的. 一.dwr配置篇之web.xml 1.最小配 <servlet> <servlet-name>dwr-invoker</

  • JAVA实现通用日志记录方法

    前言: 之前想在filter层直接过滤httpServerletRequest请求进行日志处理,但是之后再getWriter()的 时候报already been call异常.查了下,才发现原来流形式的只能读取一次..就好像食物,吃了就没了.. 所以在filter和inteceptor里面是没法通过获取request的流来进行日志记录的. 于是还是准备用通用的方法:controller层aop进行切面记录日志. 使用Aop记录操作日志 第一步:添加Aop /** * 统一日志处理Handler

  • java之File对象对文件的操作常用的几个方法(推荐)

    File对象是对文件操作最常用的类,平常工作总用的很多,贴出来了几个我工作常用的几个方法.简单总结了下 直接上代码: //构建文件对象 File file=new File("E:/android_demo/a"); File fileTest=new File("E:/android_demo/a/test.mp3"); //获取文件的父路径 File f=file.getParentFile(); System.out.println("f==&quo

  • asp sqlserver 执行存储过程返回记录集报对象关闭时不允许操作

    如果要得到返回值,需要用Command的方法. 首先说明,返回值有两种.一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样:另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定. 这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: 复制代码 代码如下: use pubs GO -- 建立存储过程 create procedure sp_PubsTest -- 定义三个参数变量,注意第三个,特别标记是用于输出

  • 基于Java子线程中的异常处理方法(通用)

    在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了.那么,在并发情况下,比如在父线程中启动了子线程,如何在父线程中捕获来自子线程的异常,从而进行相应的处理呢? 常见错误 也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try ... catch一把就可以了,其实这是不对的. 原因分析 让我们回忆一下Runnable接口的run方法的完整签名,因为没有标识throws语句,所以方法是不会抛出checked异常的.至于Runtime

  • Java面向对象之成员隐藏与属性封装操作示例

    本文实例讲述了Java面向对象之成员隐藏与属性封装操作.分享给大家供大家参考,具体如下: 关于这个功能的优点我现在体会还不深,只是从书本中找到了面向对象编程的一个原则--尽量让数据私有.如果需要对数据的信息进行修改或者获取,不会直接修改成员信息,而是通过方法的调用来实现. 写如下代码: packagefengzhuang; class HuaShanPai { private String zhangmen; private int dizishu; private String gongfu;

随机推荐