Java后端統一封裝返回結果
在Java的Web編程中,總是需要返回結果的嘛,對於前后端分離的項目來說,對結果的封裝尤其重要,如果不進行封裝的話總是需要各種各樣的返回類型,如果說統一了返回值類型的話那就只需要指定一種返回值就好了
我是這樣做的,封裝一個Result VO類 表示這是要給前端展示的對象,ViewObject。
里面的字段主要有
- code 響應碼 自定的
- msg 返回消息
- data 真實的返回的數據
- timestamp 時間戳
然后這樣完了后,還有一點需要考慮,就是這對對象需要頻繁的被創建,但是有很多時候里面的數據都是空的,或者說是類似的,這個時候就需要事先創建一些對象,然后使用靜態方法返回,這樣就不用頻繁的使用new關鍵字進行創建了。省去很多時間,然后呢,還有一些情況是就里面的數據不一樣,響應碼以及消息都是一樣的所以需要再抽取一個方法然后通過參數傳入變化的數據。
然后如果什么都不一樣的話也是會使用new關鍵字進行創建,這樣也很麻煩,因為每次賦值都需要寫一下對象名然后使用setter進行賦值嘛。這個時候我們極其自然的想到一種設計模式那就是建造者模式,不需要使用new關鍵字,而且是鏈式編程,很是方便,而且幸運的是,在Lombok中提供了一個注解@Builder來生成該類的建造者很是方便。
至此返回結果就封裝完畢了
具體如下
/**
* @author lc
* @date 2020-12-22 17:40
*/
@Builder
@ToString
public class ResultVO {
/**
* 響應碼
*/
public int code;
/**
* 返回的數據
*/
public Object data;
/**
* 時間戳
*/
public Date timestamp;
/**
* 消息
*/
public String msg;
public static ResultVO error() {
return ResultVO.builder().code(20001).data(false).timestamp(new Date()).build();
}
public static ResultVO error(Object data) {
return ResultVO.builder().code(20001).data(data).timestamp(new Date()).build();
}
public static ResultVO success() {
return ResultVO.builder().code(20000).data(true).timestamp(new Date()).build();
}
public static ResultVO success(Object data) {
return ResultVO.builder().code(20000).data(data).timestamp(new Date()).build();
}
}xxxxxxxxxx public static ResultVO success(Object data) { return ResultVO.builder().code(20000).data(data).timestamp(new Date()).build(); }}/** * @author lc * @date 2020-12-22 17:40 */@Builder@ToStringpublic class ResultVO { /** * 響應碼 */ public int code; /** * 返回的數據 */ public Object data; /** * 時間戳 */ public Date timestamp; /** * 消息 */ public String msg; public static ResultVO error() { return ResultVO.builder().code(20001).data(false).timestamp(new Date()).build(); } public static ResultVO error(Object data) { return ResultVO.builder().code(20001).data(data).timestamp(new Date()).build(); } public static ResultVO success() { return ResultVO.builder().code(20000).data(true).timestamp(new Date()).build(); } public static ResultVO success(Object data) { return ResultVO.builder().code(20000).data(data).timestamp(new Date()).build(); }}
但是還有一個點,那就是狀態碼,也就是響應碼 如果改變的話,需要對每個進行方便,而且在《阿里巴巴編程規約》中不建議使用魔法值。所以我們需要在一個類中將這些狀態碼,封裝成常量,這樣如果需要改變的話只需要對這個類進行修改就好了
package com.cliong.mall.entity;
/**
* @author lc
* @date 2020-12-24 15:28
*/
public class ResultStatus {
public final static int SUCCESS = 20000;
public final static int FAIL = 20001;
}
至此,完成