統一返回資料格式
阿新 • • 發佈:2020-12-03
統一返回資料格式
專案中我們會將響應封裝成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);
}