1. 程式人生 > 實用技巧 >統一返回資料格式

統一返回資料格式

統一返回資料格式

專案中我們會將響應封裝成json返回,一般我們會將所有介面的資料格式統一, 使前端(iOS Android, Web)對資料的操作更一致、輕鬆。

統一返回資料格式沒有固定的格式,只要能描述清楚返回的資料狀態以及要返回的具體資料就可以。但是一般會包含狀態碼、返回訊息、資料這幾部分內容

要求返回的基本資料格式如下:

列表

{
  "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": true,
  "code": 20000,
  "message": "成功",
  "data": {}
}

失敗

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

所以統一返回結果:

{
  "success": 布林, //響應是否成功
  "code": 數字, //響應碼
  "message": 字串, //返回訊息
  "data": HashMap //返回資料,放在鍵值對中
}

建立統一結果返回類:

建介面ResultCode

public interface ResultCode {
    public static Integer SUCCESS = 20000;

    public static Integer ERROR = 20001;
}

建結果類R

//統一返回結果
@Data
public class R {
    @ApiModelProperty(value = "是否成功")
    private Boolean success;

    @ApiModelProperty(value = "返回碼")
    private Integer code;

    @ApiModelProperty(value = "返回訊息")
    private String message;

    @ApiModelProperty(value = "返回資料")
    private Map<String, Object> data = new HashMap<String, Object>();
    //構造方法私有  不允許呼叫
    private R(){}

    public static R ok(){
        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;
    }

    public static R error(){
        R r = new R();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失敗");
        return r;
    }

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

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

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

    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }

    public R data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
}

使用:

在需要使用的模組中新增依賴

<dependency>
    <groupId>com.courage</groupId>
    <artifactId>common_utils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

修改Controller中方法的返回結果為R

@ApiOperation(value = "所有講師列表")
@GetMapping
public R list(){
    List<Teacher> list = teacherService.list(null);
    return R.ok().data("items", list);
}