现阶段越来越多的项目采用前后端的分离开发模式,前端请求后台接口获取数据,后台返回结果,这时我们往往会定义好一种固定的数据格式来实现数据的传递,下面就本人在开发中常用的数据对象来做简单说明
我们在开发中定义后台接口时,后台返回数据可以定义为Result<T>
,其中泛型T
根据接口获取的不同数据根据情况而定,其中code
为请求接口的状态码,msg
为该次请求结果的提示信息(code
和msg
可一一对应,封装为枚举对象),data
为返回数据,具体的代码如下
package com.lzycug.mail.pojo;
import java.io.Serializable;
/**
* 后台返回前端数据对象
*
* @author lzycug
* @param <T>
* @since 2020-07-11
*/
public class Result<T> implements Serializable {
private static final long serialVersionUID = -7264375751490927423L;
/**
* 状态码
*/
private String code = "0";
/**
* 信息
*/
private String msg;
/**
* 返回数据
*/
private T data;
public <T> Result() {
}
public Result(String code, String msg) {
this.code = code;
this.msg = msg;
}
public Result(String code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static Result ok() {
return new Result(ResultCode.OK.getCode(), ResultCode.OK.getMsg());
}
public static <T> Result ok(T data) {
return new Result(ResultCode.OK.getCode(), ResultCode.OK.getMsg(), data);
}
public static Result error() {
return new Result(ResultCode.ERROR.getCode(), ResultCode.ERROR.getMsg());
}
public static Result error(String code) {
return new Result(code, ResultCode.getMsgByCode(code));
}
public static Result error(String code, String msg) {
return new Result(code, msg);
}
public static <T> Result error(String code, T data) {
return new Result(code, ResultCode.getMsgByCode(code), 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) {
this.data = data;
}
}
code
和msg
的对应枚举对象
package com.lzycug.mail.pojo;
import org.apache.commons.lang3.StringUtils;
/**
* 返回结果枚举对象
*
* @author lzycug
* @since 2020-07-11
*/
public enum ResultCode {
// 根据业务需要补充相应的状态码及对应的提示信息,此处作简单罗列
OK("0", "操作成功"),
NOPARAMETER("1001", "参数为空"),
NOAUTH("1002", "暂无接口调用权限"),
ERROR("-1", "系统内部异常");
private String code;
private String msg;
ResultCode(String code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 根据code值获取对应的消息
*
* @param code 状态码
* @return 消息
*/
public static String getMsgByCode(String code) {
String msg = StringUtils.EMPTY;
ResultCode[] resultCodes = values();
for (ResultCode resultCode : resultCodes) {
if (StringUtils.equals(code, resultCode.code)) {
msg = resultCode.msg;
}
}
return msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
上面只是一个实例,根据具体的业务需要,可增加返回的字段与前端,简单案例可参考https://github.com/Lzycug/stepRepository.git下的mail项目