前後端分離:高複用服務響應物件的設計與使用
阿新 • • 發佈:2018-11-04
高複用服務響應物件的設計與使用
一.什麼是高複用服務響應物件?它有什麼作用?
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進行介面功能測試時更加直觀地看到了這個物件的作用。