技术目标:
你在写接口的时候,还在定义各种返回格式吗,有因为这个返回值和返回格式发生冲突而烦恼吗?下面介绍一个接口返回数据格式,帮小伙伴们解决这个烦恼
public List getValue1(){
List list = new ArrayList<>();
// return "出现问题"; //不可以返回规定返回类型的值
return list;
}
技术实现:
1、首先创建一个规定返回值的常量接口类(下篇文章会介绍一下声明常量在接口、类中的一些看法)
public interface CommonConstant {
/**
* 正常状态
*/
Integer STATUS_NORMAL = 0;
/**
* 禁用状态
*/
Integer STATUS_DISABLE = -1;
/**
* {@code 200 OK} (HTTP/1.0 - RFC 1945)
*/
Integer SC_OK_200 = 200;
/**
* {@code 500 Server Error} (HTTP/1.0 - RFC 1945)
*/
Integer SC_INTERNAL_SERVER_ERROR_500 = 500;
/**
* 访问权限认证未通过 510
*/
Integer SC_JEECG_NO_AUTHZ = 510;
2、创建接口返回对象
@Data
public class Result<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 成功标志
*/
private boolean success = true;
/**
* 返回处理消息
*/
private String message = "操作成功!";
/**
* 返回代码
*/
private Integer code = 0;
/**
* 返回数据对象 data
*/
private T result;
/**
* 时间戳
*/
private long timestamp = System.currentTimeMillis();
public Result() {
}
public Result<T> success(String message) {
this.message = message;
this.code = CommonConstant.SC_OK_200;
this.success = true;
return this;
}
public static Result<Object> ok() {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setMessage("成功");
return r;
}
public static Result<Object> ok(String msg) {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setMessage(msg);
return r;
}
public static Result<Object> ok(Object data) {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(data);
return r;
}
public static Result<Object> ok(String msg, String result) {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setMessage(msg);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(result);
return r;
}
public static Result<Object> ok(String msg, Object data) {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setMessage(msg);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(data);
return r;
}
public static Result<Object> error(String msg) {
return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
}
public static Result<Object> error(int code, String msg) {
Result<Object> r = new Result<Object>();
r.setCode(code);
r.setMessage(msg);
r.setSuccess(false);
return r;
}
public Result<T> error500(String message) {
this.message = message;
this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
this.success = false;
return this;
}
/**
* 无权限访问返回结果
*/
public static Result<Object> noauth(String msg) {
return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg);
}
}
该返回类中还可以根据自己业务的需求定义多种返回方式。
实现结果:
创建接口返回对象后,就可以使用该类型作为返回对象了,可以自己试一下:
public Result<?> getValue2(){
List list = new ArrayList<>();
// return Result.error("出现问题"); //返回报错内容
return Result.ok(list); //返回List对象
}
这样就不会被定义的返回对象格式而限制到真正的返回对象了,灵活性更高,而且具有可扩展性。