1. 程式人生 > 其它 >輸出整數的每一位

輸出整數的每一位

後端給前端統一返回結果


一、統一返回資料格式

專案中我們會將響應封裝成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