java代碼整潔之道(三)_如何設計的接口,返回對象,對異常的處理

1.返回的model

(1)api接口返回model封裝

package com.study.project.result;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.io.Serializable;


@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class CallResult<T>  implements Serializable {
    //請求返回碼
    private int code;
    //請求返回的toast  的提示
    private String message;
    //錯誤的詳細信息 包括異常的詳細描述
    private String desc;
    //請求的返回實體(正常返回的時候纔會返回)
    private T result;
    //構造方法
    public CallResult() {
    }

    public CallResult(int code, String message, T result) {
        this.code = code;
        this.message = message;
        this.result = result;
    }

    public CallResult(int code, String message,String  desc ,T result) {
        this.code = code;
        this.message = message;
        this.desc = desc;
        this.result = result;
    }

    /**
     * success 方法
     * @param <T>
     * @return
     */
    public  static  <T>CallResult<T> success(){
        return    new CallResult(BusinessCodeEnum.DEFAULT_SUCCESS.getCode(),BusinessCodeEnum.DEFAULT_SUCCESS.getMsg(),null);
    }

    public  static  <T>CallResult<T> success(T result){
        return    new CallResult(BusinessCodeEnum.DEFAULT_SUCCESS.getCode(),BusinessCodeEnum.DEFAULT_SUCCESS.getMsg(),result);
    }

    /**
     * fail
     * @param <T>
     * @return
     */
    public static <T> CallResult<T> fail() {
        return new CallResult(BusinessCodeEnum.DEFAULT_SYS_ERROR.getCode(), BusinessCodeEnum.DEFAULT_SYS_ERROR.getMsg(), (Object)null);
    }

    public static <T> CallResult<T> fail(T result) {
        return new CallResult(BusinessCodeEnum.DEFAULT_SYS_ERROR.getCode(), BusinessCodeEnum.DEFAULT_SYS_ERROR.getMsg(), result);
    }

    public static <T> CallResult<T> fail(int code, String message , String desc) {
        return new CallResult(code, message,desc,(Object) null);
    }

    public boolean isSuccess() {
        return this.code == BusinessCodeEnum.DEFAULT_SUCCESS.getCode();
    }

}


com.fasterxml.jackson.annotation.JsonInclude; 返回實體中有null 將被過濾掉

(2)返回code 碼封裝

code 枚舉2 000 000 000 枚舉代碼共 10 位 ,後三位代表業務(參數校驗,系統錯誤,業務異常等),中間三位代表不同的微服務名稱,最前面三位可以代表業務線。這段代碼codeMap 設計還是很精巧的,static 靜態代碼塊包裹,保證了這段代碼只被初始化一次,map 容量初始化不會浪費多餘空間

package com.study.project.result;

import java.util.HashMap;
import java.util.Map;

public enum BusinessCodeEnum {
    DEFAULT_SUCCESS(2000000000, "default success"),
    DEFAULT_SYS_ERROR(2000000999, "系統錯誤"),
    CHECK_PARAM_NO_RESULT(2000000100, "檢測參數無結果"),
    CHECK_BIZ_NO_RESULT(2000000101, "檢查業務無結果"),
    CHECK_ACTION_NO_RESULT(2000000102, "檢查執行情況無結果");

    private static final Map<Integer, BusinessCodeEnum> codeMap = new HashMap((int)((double)values().length / 0.75D) + 1);
    private int code;
    private String msg;

    public static BusinessCodeEnum valueOfCode(int code) {
        return (BusinessCodeEnum)codeMap.get(code);
    }

    private BusinessCodeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    static {
        BusinessCodeEnum[] var0 = values();
        int var1 = var0.length;
        for(int var2 = 0; var2 < var1; ++var2) {
            BusinessCodeEnum businessCodeEnum = var0[var2];
            codeMap.put(businessCodeEnum.getCode(), businessCodeEnum);
        }

    }
    public static void main(String[] args) {
        System.out.println(codeMap.get(BusinessCodeEnum.CHECK_ACTION_NO_RESULT.getCode()).getMsg());
    }
}

2.接口的訪問控制

對於接口訪問控制我的個人任務要分清服務,業務,接口版本,方法
所以
api class 上註解應該是 @RequstMapping("/服務名/業務名")
api method 上的註解應該是 @RequestMapping("/版本號/方法名")
當然尋址直接可以用自己寫的

3.異常處理

此處參考java代碼整潔之道(一)_不斷code review後的感想 中的短路式寫法

if (user == null){
        throw new ServiceException("code","erroMsg","desc");
 }

這樣的寫法好處就是,不會到處的try catch 又能及時的阻斷業務進程 ServiceException 參考java代碼整潔之道(二)如何自定義異常

再接口統一異常處理參考:jjava代碼整潔之道(五) 創建一個統一處理異常的切面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章