开发中对返回结果类的封装

BigDevil_—JsonResult

import java.util.List;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 自定义响应结构
 */
public class JsonResult {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    private Integer status;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;

    public static JsonResult build(Integer status, String msg, Object data) {
        return new JsonResult(status, msg, data);
    }

    public static JsonResult ok(Object data) {
        return new JsonResult(data);
    }

    public static JsonResult ok() {
        return new JsonResult(null);
    }

    public JsonResult() {

    }

    public static JsonResult build(Integer status, String msg) {
        return new JsonResult(status, msg, null);
    }

    public JsonResult(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public JsonResult(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }

//    public Boolean isOK() {
//        return this.status == 200;
//    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    /**
     * 将json结果集转化为JsonResult 
     * @param jsonData json数据
     * @param clazz JsonResult中的object类型
     * @return
     */
    public static JsonResult formatToPojo(String jsonData, Class<?> clazz) {
        try {
            if (clazz == null) {
                return MAPPER.readValue(jsonData, JsonResult.class);
            }
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (clazz != null) {
                if (data.isObject()) {
                    obj = MAPPER.readValue(data.traverse(), clazz);
                } else if (data.isTextual()) {
                    obj = MAPPER.readValue(data.asText(), clazz);
                }
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 没有object对象的转化
     * 
     * @param json
     * @return
     */
    public static JsonResult format(String json) {
        try {
            return MAPPER.readValue(json, JsonResult.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Object是集合 转化
     * 
     * @param jsonData json数据
     * @param clazz 集合中的类型
     * @return
     */
    public static JsonResult formatToList(String jsonData, Class<?> clazz) {
        try {
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (data.isArray() && data.size() > 0) {
                obj = MAPPER.readValue(data.traverse(),
                        MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }

}

毕设使用—JSONResultUtil

public class JSONResultUtil {
	private boolean success;
	private Object data;
	private String msg;
	public boolean isSuccess() {
		return success;
	}
	public void setSuccess(boolean success) {
		this.success = success;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public JSONResultUtil() {
		super();
	}
	public JSONResultUtil(boolean success) {
		super();
		this.success = success;
	}
	
	public JSONResultUtil(boolean success, String msg) {
		super();
		this.success = success;
		this.msg = msg;
	}
	
	/**
	 * 返回正确结果不带数据
	 * @return
	 */
	public static JSONResultUtil ok() {
		return new JSONResultUtil(true);
	}
	
	/**
	 * 返回错误结果带错误信息
	 * @param msg
	 * @return
	 */
	public static JSONResultUtil error(String msg) {
		return new JSONResultUtil(false, msg);
	}
}

SSM项目使用—ResultEntity

package com.study.util;

import java.util.HashMap;
import java.util.Map;

/**
 * @author:发则韩
 * @description:统一返回结果实体类
 *              使用案例: ResultEntity.success().put("page",pageInfo)
 *                          .put("requestURI",request.getRequestURI());
 *              返回状态码200,消息为操作成功,分页的信息,请求URI
 */
public class ResultEntity {
    private Map<String,Object> map = new HashMap<>();

    /**
     * @author 发则韩
     * @description 成功后返回状态码200,消息为操作成功,
     *              返回一个ResultEntity为了继续调用put方法
     */
    public static ResultEntity success(){
        ResultEntity resultEntity = new ResultEntity();
        resultEntity.map.put("statusCode", 200);
        resultEntity.map.put("message", "操作成功");
        return resultEntity;
    }

    /**
     * @author 发则韩
     * @description 成功后返回状态码500,消息为操作失败,
     *              返回一个ResultEntity为了继续调用put方法
     */
    public static ResultEntity error(){
        ResultEntity resultEntity = new ResultEntity();
        resultEntity.map.put("statusCode", 500);
        resultEntity.map.put("message", "操作失败");
        return resultEntity;
    }

    /**
     * @author 发则韩
     * @description 往当前ResultEntity的map继续添加key-value,
     *              如分页数据 put("page",pageInfo)
     */
    public ResultEntity put(String key,Object value){
        this.map.put(key, value);
        return this;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }
}

这个方法的返回结果样式:

{
	"map":{
		"statusCode":500,
		"message":"操作失败"
	}
}

很明显会多一层map,因此需要优化。

优化后的实体类

import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.HashMap;
import java.util.Map;

/**
 * 统一返回结果实体类
 */
@JsonInclude(JsonInclude.Include.NON_NULL) //如果data为null,则不显示
public class ResultEntity {
    private Integer code;

    private String message;

    private Map<String,Object> data;

    /**
     * 返回状态码200,消息自定义
     * 返回一个ResultEntity为了继续调用put方法
     */
    public static ResultEntity success(String message){
        ResultEntity resultEntity = new ResultEntity();
        resultEntity.code = 200;
        resultEntity.message = message;
        return resultEntity;
    }

    /**
     * 返回状态码500,消息自定义
     * 返回一个ResultEntity为了继续调用put方法
     */
    public static ResultEntity error(String message){
        ResultEntity resultEntity = new ResultEntity();
        resultEntity.code = 500;
        resultEntity.message = message;
        return resultEntity;
    }

    /**
     * 返回状态码自定义,消息自定义
     * 返回一个ResultEntity为了继续调用put方法
     */
    public static ResultEntity error(Integer code, String message){
        ResultEntity resultEntity = new ResultEntity();
        resultEntity.code = code;
        resultEntity.message = message;
        return resultEntity;
    }

    /**
     * 往当前ResultEntity的map继续添加key-value
     */
    public ResultEntity put(String key,Object value){
        if(this.data == null){
            this.data = new HashMap<>();
        }
        this.data.put(key, value);
        return this;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setData(Map<String,Object> data) {
        this.data = data;
    }

    public java.util.Map<String, Object> getData() {
        return data;
    }
}

Spring Boot项目使用—AppResponse与枚举类

创建一个泛型类AppResponse<T>,定义三个私有成员变量code(Integer型)、msg(String型)、data(T型),分别的作用是响应码,响应消息以及响应数据。定义两个静态方法ok(T data)和fail(T data),用于快速返回响应成功或失败,成功和失败的响应码以及响应信息从枚举类ResponseCodeEnum中获取,响应的数据通过参数传递进来后设置到变量data中。

AppResponse.java

import com.study.common.enums.ResponseCodeEnum;

/**
 * 应用统一返回结果数据封装类
 * @author Administrator
 * @param <T> 返回结果数据类型
 */
public class AppResponse<T> {

    private Integer code;
    private String msg;
    private T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer 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) {
        this.data = data;
    }

    /**
     * 快速响应成功
     * @param data
     * @return
     */
    public static<T> AppResponse<T> ok(T data){
        AppResponse<T> resp = new AppResponse<T>();
        // 对应枚举类中的 0
        resp.setCode(ResponseCodeEnum.SUCCESS.getCode());
        // 对应枚举类中的 "操作成功"
        resp.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        resp.setData(data);
        return resp;
    }

    /**
     * 快速响应失败
     */
    public static<T> AppResponse<T> fail(T data){
        AppResponse<T> resp = new AppResponse<T>();
        // 对应枚举类中的 1
        resp.setCode(ResponseCodeEnum.FAIL.getCode());
        // 对应枚举类中的 "服务器异常"
        resp.setMsg(ResponseCodeEnum.FAIL.getMsg());
        resp.setData(data);
        return resp;
    }
}

枚举类ResponseCodeEnum.java

public enum ResponseCodeEnum {

    SUCCESS(0,"操作成功"),
    FAIL(1,"服务器异常"),
    PARAM_INVAILD(400,"提交参数非法"),
    NOT_AUTHED(403,"无权限,访问拒绝"),
    NOT_FOUND(404,"资源未找到");

    private Integer code;
    private String msg;


    private ResponseCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }

}

多提一嘴,枚举类用于定义多个固定值来对应某个业务的多个场景,比如订单状态OrderStatusEnum、项目状态ProjectStatusEnum等。

public enum OrderStatusEnumes {
	
	UNPAY((byte)0,"未支付"),
	CANCEL((byte)1,"已取消"),
	PAYED((byte)2,"支付成功"),
	WAITING((byte)3,"等待发货"),
	SEND((byte)4,"已发货"),
	SENDED((byte)5,"已送达"),
	SUCCESS((byte)6,"交易完成"),
	FAIL((byte)7,"交易未完成");
	
	private byte code;
	private String status;
	public byte getCode() {
		return code;
	}
	public void setCode(byte code) {
		this.code = code;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	private OrderStatusEnumes(byte code, String status) {
		this.code = code;
		this.status = status;
	}
}

--------------------------分割线------------------------

/**
 * 项目状态
 */
public enum ProjectStatusEnume {

    DRAFT((byte)0,"草稿"),
    SUBMIT_AUTH((byte)1,"提交审核申请"),
    AUTHING((byte)2,"后台正在审核"),
    AUTHED((byte)3,"后台审核通过"),
    AUTHFAIL((byte)4,"审核失败"),
    STARTING((byte)5,"开始众筹"),//新增众筹项目一些状态
    SUCCESS((byte)6,"众筹成功"),
    FINISHED((byte)7,"众筹完成"),
    FAIL((byte)8,"众筹失败");

    private byte code;
    private String status;
    public byte getCode() {
        return code;
    }
    public void setCode(byte code) {
        this.code = code;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    private ProjectStatusEnume(byte code, String status) {
        this.code = code;
        this.status = status;
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值