輸出整數的每一位
阿新 • • 發佈:2021-01-11
後端給前端統一返回結果
一、統一返回資料格式
專案中我們會將響應封裝成json返回給前端,一般我們會將所有介面的資料格式統一, 使前端(iOS Android, Web)對資料的操作更一致、輕鬆。
一般情況下,統一返回資料格式沒有固定的格式,只要能描述清楚返回的資料狀態以及要返回的具體資料就可以。但是一般會包含狀態碼、返回訊息、資料這幾部分內容。
例如,我們的系統要求返回的基本資料格式如下:
1、列表
{ "success": true, "code": 20000, "message": "成功", "data": { "items": [{ "id": "1", "name": "cakin", "intro": "畢業於師範大學數學系,熱愛教育事業,執教數學思維6年有餘" }] } }
2、分頁
{
"success": true,
"code": 20000,
"message": "成功",
"data": {
"total": 17,
"rows": [{
"id": "1",
"name": "cakin",
"intro": "畢業於師範大學數學系,熱愛教育事業,執教數學思維6年有餘"
}]
}
}
3、沒有返回結果
{ "success": true, "code": 20000, "message": "成功", "data": {} }
4、失敗
{
"success": false,
"code": 20001,
"message": "失敗",
"data": {}
}
5、分析上面4種情況,我們定義統一結果如下
{
"success": 布林, // 響應是否成功
"code": 數字, //響應碼
"message": 字串, //返回訊息
"data": HashMap //返回資料,放在鍵值對中
}
二、定義統一返回結果
1 、在base包中建立返回碼定義列舉類-->ResultCodeEnum.java
@Getter @ToString public enum ResultCodeEnum { SUCCESS(true, 20000, "成功"), UNKNOWN_REASON(false, 20001, "未知錯誤"), BAD_SQL_GRAMMAR(false, 21001, "sql語法錯誤"), JSON_PARSE_ERROR(false, 21002, "json解析異常"), PARAM_ERROR(false, 21003, "引數不正確"), FILE_UPLOAD_ERROR(false, 21004, "檔案上傳錯誤"), FILE_DELETE_ERROR(false, 21005, "檔案刪除錯誤"), EXCEL_DATA_IMPORT_ERROR(false, 21006, "Excel資料匯入錯誤"), VIDEO_UPLOAD_ALIYUN_ERROR(false, 22001, "視訊上傳至阿里雲失敗"), VIDEO_UPLOAD_TOMCAT_ERROR(false, 22002, "視訊上傳至業務伺服器失敗"), VIDEO_DELETE_ALIYUN_ERROR(false, 22003, "阿里雲視訊檔案刪除失敗"), FETCH_VIDEO_UPLOADAUTH_ERROR(false, 22004, "獲取上傳地址和憑證失敗"), REFRESH_VIDEO_UPLOADAUTH_ERROR(false, 22005, "重新整理上傳地址和憑證失敗"), FETCH_PLAYAUTH_ERROR(false, 22006, "獲取播放憑證失敗"), URL_ENCODE_ERROR(false, 23001, "URL編碼失敗"), ILLEGAL_CALLBACK_REQUEST_ERROR(false, 23002, "非法回撥請求"), FETCH_ACCESSTOKEN_FAILD(false, 23003, "獲取accessToken失敗"), FETCH_USERINFO_ERROR(false, 23004, "獲取使用者資訊失敗"), LOGIN_ERROR(false, 23005, "登入失敗"), COMMENT_EMPTY(false, 24006, "評論內容必須填寫"), PAY_RUN(false, 25000, "支付中"), PAY_UNIFIEDORDER_ERROR(false, 25001, "統一下單錯誤"), PAY_ORDERQUERY_ERROR(false, 25002, "查詢支付結果錯誤"), ORDER_EXIST_ERROR(false, 25003, "課程已購買"), GATEWAY_ERROR(false, 26000, "服務不能訪問"), CODE_ERROR(false, 28000, "驗證碼錯誤"), LOGIN_PHONE_ERROR(false, 28009, "手機號碼不正確"), LOGIN_MOBILE_ERROR(false, 28001, "賬號不正確"), LOGIN_PASSWORD_ERROR(false, 28008, "密碼不正確"), LOGIN_DISABLED_ERROR(false, 28002, "該使用者已被禁用"), REGISTER_MOBLE_ERROR(false, 28003, "手機號已被註冊"), LOGIN_AUTH(false, 28004, "需要登入"), LOGIN_ACL(false, 28005, "沒有許可權"), SMS_SEND_ERROR(false, 28006, "簡訊傳送失敗"), SMS_SEND_ERROR_BUSINESS_LIMIT_CONTROL(false, 28007, "簡訊傳送過於頻繁"); private Boolean success; private Integer code; private String message; ResultCodeEnum(Boolean success, Integer code, String message) { this.success = success; this.code = code; this.message = message; } }
2、在base包中建立結果類-->R.java
/**
* @className: R
* @description: 全域性統一返回結果
* @date: 2020/11/16
*/
@Data
@ApiModel(value = "全域性統一返回結果")
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>();
public R(){}
/**
* 功能描述:成功返回
*
* @date 2020/11/16
* @return R 成功返回結果
* @description:
*/
public static R ok(){
R r = new R();
r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
r.setCode(ResultCodeEnum.SUCCESS.getCode());
r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
return r;
}
/**
* 功能描述:失敗返回
*
* @date 2020/11/16
* @return R 失敗返回結果
*/
public static R error(){
R r = new R();
r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
return r;
}
/**
* 功能描述:設定返回結果
*
* @date 2020/11/16
* @param resultCodeEnum 結果列舉
* @return R 返回給前端的結果
*/
public static R setResult(ResultCodeEnum resultCodeEnum){
R r = new R();
r.setSuccess(resultCodeEnum.getSuccess());
r.setCode(resultCodeEnum.getCode());
r.setMessage(resultCodeEnum.getMessage());
return r;
}
/**
* 功能描述:設定success狀態
*
* @date 2020/11/16
* @param success 值為true或false
* @return R 返回給前端的資料
*/
public R success(Boolean success){
this.setSuccess(success);
return this;
}
/**
* 功能描述:設定message內容
*
* @date 2020/11/16
* @param message 訊息內容
* @return R 返回給前端的資料
*/
public R message(String message){
this.setMessage(message);
return this;
}
/**
* 功能描述:設定code內容
*
* @date 2020/11/16
* @param code 返回碼
* @return R 返回給前端的資料
*/
public R code(Integer code){
this.setCode(code);
return this;
}
/**
* 功能描述:單值設定資料
*
* @date 2020/11/16
* @param key 鍵
* @param value 值
* @return R 返回給前端的資料
*/
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
/**
* 功能描述:多值設定資料
*
* @date 2020/11/16
* @param map 集合
* @return R 返回給前端的資料
*/
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
3、修改Controller中的返回結果
// @ApiOperation:定義在方法上
@ApiOperation("所有講師列表")
@GetMapping("list")
public R listAll() {
List<Teacher> list = teacherService.list();
return R.ok().data("items", list);
}
// @ApiOperation:定義在方法上
@ApiOperation(value = "根據ID刪除講師", notes = "根據ID刪除講師,邏輯刪除")
@DeleteMapping("remove/{id}")
// @ApiParam:定義在引數上
public R removeById(@ApiParam(value = "講師ID", required = true) @PathVariable String id) {
boolean result = teacherService.removeById(id);
if (result) {
return R.ok().message("刪除成功");
} else {
return R.error().message("資料不存在");
}
}
4、重啟測試
轉自:https://blog.csdn.net/chengqiuming/article/details/109729994