统一返回结果类/数据格式

在我们日常开发中,很多需要统一返回一个固定格式给前端,一般定义一个统一返回结果封装类。

下面正文

一般要求返回的基本数据格式如下:

列表:

{
  "success": true,
  "code": 20000,
  "message": "成功",
  "data": {
    "items": [
      {
        "id": "1",
        "name": "刘德华",
        "intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
      }
    ]
  }
}

分页:

{
  "success": true,
  "code": 20000,
  "message": "成功",
  "data": {
    "total": 17,
    "rows": [
      {
        "id": "1",
        "name": "刘德华",
        "intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
      }
    ]
  }
}

没有返回数据:

{
  "success": false,
  "code": 20001,
  "message": "失败",
  "data": {}
}

失败:

{
  "success": false,
  "code": 20001,
  "message": "失败",
  "data": {}
}

这里需要注意:分页和列表的data是不同的,分页里面多了一个total页数,列表的data:只有一个items,分页的data:total+items

因此,我们定义统一结果

{
  "success": 布尔, //响应是否成功
  "code": 数字, //响应码
  "message": 字符串, //返回消息
  "data": HashMap //返回数据,放在键值对中
}

统计返回结果类:

/**
 * 统一返回结果封装类
 */
@Schema(description = "统一返回结果封装类")
@Data
public class R {

    @Schema(description = "是否成功")
    private Boolean success;

    @Schema(description = "返回码")
    private Integer code;

    @Schema(description = "返回消息")
    private String message;

    @Schema(description = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();

    private R(){

    }

    public static R ok(){
        R r = new R();
        r.code=REnum.SUCCESS.getCode();
        r.success=REnum.SUCCESS.getFlag();
        r.message=REnum.SUCCESS.getMessage();
        return r;
    }

    public static R error(){
        R r = new R();
        r.code=REnum.ERROR.getCode();
        r.success=REnum.ERROR.getFlag();
        r.message=REnum.ERROR.getMessage();
        return r;
    }

    /*  下面这些是给外界提供setter方法设置值的  */

    public R success(Boolean success){
        this.success=success;
        return this;
    }

    public R message(String message){
        this.message=message;
        return this;
    }

    public R code(Integer code){
        this.code=code;
        return this;
    }

    // 外界传一个键值对过来
    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    // 外界传多个键值对过来  有多个键值对 外界先把键值对拼接好放到map里面,然后再传过来
    public R data(Map<String, Object> map){
        this.data=map;
        return this;
    }
}

与结果类相关的枚举类(为了开发更加美观可维护):


public enum REnum {

    //枚举项   相当于new R("1","小明","男")  SUCCESS相当于对象引用
    // 调用: REnum.SUCCESS.getXXX属性  private情况
    // 调用: REnum.SUCCESS.XXX属性  public情况
    SUCCESS(20000,"成功",true),
    ERROR(20001,"失败",false)

    ;

    private Integer code;
    private String message;
    private Boolean flag;

    REnum(Integer code, String message, Boolean flag) {
        this.code = code;
        this.message = message;
        this.flag = flag;
    }

    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 Boolean getFlag() {
        return flag;
    }

    public void setFlag(Boolean flag) {
        this.flag = flag;
    }
}

在controller里面使用:

结果:

 

 结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值