1. 程式人生 > >前後端分離:高複用服務響應物件的設計與使用

前後端分離:高複用服務響應物件的設計與使用

高複用服務響應物件的設計與使用

一.什麼是高複用服務響應物件?它有什麼作用?

  1.這次專案中,為了實現前後端分離,設計了一個所有介面都使用,封裝後臺業務資料放回json資料給前端的物件,用於實現前後端的分離,開發效率有了明顯的提高。 

二.怎麼使用?

  1.首先,要明確,這個物件要實現序列化介面。它主要封裝了三個屬性,泛型的返回資料,字串型別的提示資訊以及整型的狀態碼,以及四個私有的建構函式,需要注意的是,當T 的型別也就是資料型別是String型別時,好像會和下面的String msg重合,到底會呼叫哪一個呢?答案是,當T為String時,的確會呼叫第二個,這樣會產生一個問題,就是當返回的資料就是String,如果這樣就會用到msg的那個建構函式,傳到資訊那邊去了。解決方法在後面,所以具體如下://保證在序列化json時,如果為空的值,key也會消失,比如只要返回狀態碼時,msg和data就會忽略不返回

//保證在序列化json時,如果為空的值,key也會消失
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServerResponse<T> implements Serializable {
    private int status;
    private String msg;
    private T data;

    private ServerResponse(int status){
        this.status = status;
    }
    private ServerResponse(int status,String msg){
        this.status = status;
        this.msg = msg;
    }
    private ServerResponse(int status,String msg,T data){
        this.status = status;
        this.msg = msg;
        this.data = data;
    }
    private ServerResponse(int status,T data){
        this.data = data;}

 

2.成員變數的get方法,以及一個判斷狀態碼或者說判斷響應是否成功的方法,具體如下:

@JsonIgnore//在序列化時忽略
    public boolean isSuccess(){
        return this.status==ResponseCode.SUCCESS.getCode();
    }
    public int getStatus(){
        return status;
    }
    public String getMsg(){
        return msg;
    }
    public T getData(){
        return data;
    }

 

3.提供對外訪問的七個構造方法,成功的有四個,失敗的三個,具體如下:

public static  <T> ServerResponse<T> creatBySuccess(){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
    }
    public static  <T> ServerResponse<T> creatBySuccessMessage(String msg){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
    }
    public static  <T> ServerResponse<T> creatBySuccess(T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
    }
  //這個方法就解決了msg和String型別的資料衝突的問題
public static <T> ServerResponse<T> creatBySuccess(String msg,T data){ return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data); } public static <T> ServerResponse<T> creatByError(){ return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc()); } public static <T> ServerResponse<T> creatByErrorMessage(String errorMessage){ return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage); } public static <T> ServerResponse<T> creatByErrorCodeMessage(int errorCode,String errorMessage){ return new ServerResponse<T>(errorCode,errorMessage); }

三.總結

  這次的高複用服務響應物件的設計與使用涉及到泛型類,後端的資料的處理模式,列舉類的使用,以及前後端資料互動等知識,在後期使用Restlet Clint進行介面功能測試時更加直觀地看到了這個物件的作用。