一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java封裝統一的Result Model案例

Java封裝統一的Result Model案例

2020-08-24 10:32試水流連 Java教程

這篇文章主要介紹了Java封裝統一的Result Model案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在開發過程中,有時候會需要使用錯誤碼+錯誤信息的形式,來返回某些業務操作的錯誤結果信息,來代替效率較低的異常傳遞。

這樣就需要封裝一個統一的Result model作為返回值,代替直接返回數據等結果。

1.定義錯誤碼 - 錯誤信息接口

錯誤碼可能是String、Integer、Long 等類型,也可能是enum類型。因此這里使用泛型來代替,錯誤碼類型,可以提高靈活性

。也可以通過枚舉直接實現CodeMessage接口。

?
1
2
3
4
public interface CodeMessage<C>{
  C getCode();
  String getMessage();
}

2.實現Result Model

這里定義的是service層的Result。有時候在controller層只會作一些簡單的參數校驗,在service層會作進一步的校驗,

如果controller中需要統一返回一個JsonResult可以將ServiceResult作一個簡單的轉換器進行轉換。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
public class ServiceResult<T, C> implements Serializable {
 
  public static final CodeMessage<String> SUCCESS = new DefaultMessage<>("00000000", "success");
 
  private T data;
  private CodeMessage<C> message;
  private boolean isSuccess;
 
  ServiceResult(T data, boolean isSuccess, CodeMessage<C> message) {
    this.data = data;
    this.message = message;
    this.isSuccess = isSuccess;
  }
 
  public T getData() {
    return data;
  }
 
  public CodeMessage<C> getCodeMessage() {
    return message;
  }
 
  public boolean isSuccess() {
    return isSuccess;
  }
 
  public static <D, C> ServiceResultBuilder<D, C> success() {
    ServiceResultBuilder<D, C> builder = builder();
    return builder.isSuccess(true);
  }
 
  public static <D, C> ServiceResultBuilder<D, C> success(CodeMessage<C> codeMessage) {
    ServiceResultBuilder<D, C> builder = builder();
    return builder.isSuccess(true).code(codeMessage.getCode()).message(codeMessage.getMessage());
  }
 
  public static <D> ServiceResult<D, String> success(D data) {
    ServiceResultBuilder<D, String> success = success(SUCCESS);
    return success.data(data).build();
  }
 
  public static <D, C> ServiceResult<D, C> error(CodeMessage<C> codeMessage) {
    ServiceResultBuilder<D, C> builder = builder();
    return builder.isSuccess(false).code(codeMessage.getCode()).message(codeMessage.getMessage()).build();
  }
 
  public static <D, C> ServiceResultBuilder<D, C> error() {
    ServiceResultBuilder<D, C> builder = builder();
    return builder.isSuccess(false);
  }
 
 
  static <D, C> ServiceResultBuilder<D, C> builder() {
    return new ServiceResultBuilder<>();
  }
 
  public static class DefaultMessage<C> implements CodeMessage<C>, java.io.Serializable {
 
    private C code;
    private String message;
 
    public DefaultMessage(C code, String message) {
      this.code = code;
      this.message = message;
    }
 
    @Override
    public C getCode() {
      return code;
    }
 
    @Override
    public String getMessage() {
      return message;
    }
 
    @Override
    public String toString() {
      return "DefaultMessage{" +
          "code=" + code +
          ", message='" + message + '\'' +
          '}';
    }
  }
 
  public static class ServiceResultBuilder<T, C> {
 
    private T data;
    private C code;
    private String message;
    private boolean isSuccess;
 
    ServiceResultBuilder() { //package private
    }
 
    public ServiceResultBuilder<T, C> data(T data) {
      this.data = data;
      return this;
    }
 
    ServiceResultBuilder<T, C> isSuccess(boolean isSuccess) {
      this.isSuccess = isSuccess;
      return this;
    }
 
    public ServiceResultBuilder<T, C> code(C code) {
      this.code = code;
      return this;
    }
 
    public ServiceResultBuilder<T, C> message(String message) {
      this.message = message;
      return this;
    }
 
    public ServiceResult<T, C> build() {
      Objects.requireNonNull(code, "code");
      Objects.requireNonNull(code, "message");
      return new ServiceResult<>(data, isSuccess, new DefaultMessage<>(code, message));
    }
  }
 
  @Override
  public String toString() {
    return "ServiceResult{" +
        "data=" + data +
        ", message=" + message +
        ", isSuccess=" + isSuccess +
        '}';
  }
}

3.使用

定義枚舉錯誤碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pubilc enum CodeMessageEnum implements CodeMessage<Integer> {
  some_error(1001, "錯誤信息。");
  Integer code;
  String message;
 
  CodeMessageEnum(Integer code, String message) {
    this.code = code;
    this.message = message;
  }
 
  @Override
  public Integer getCode() {
    return code;
  }
 
  @Override
  public String getMessage() {
    return message;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//返回正確結果帶返回值。
 
ServiceResult<List<String>, String> s = ServiceResult.success(Arrays.asList("1", "2", "3"));
s.isSuccess(); //true
ServiceResult<?, Integer> e1 = ServiceResult.error(CodeMessageEnum.some_error);
e1.isSuccess(); //false
ServiceResult<?, Long> e2 = ServiceResult.error(new ServiceResult.DefaultMessage<>(1000L, "error"));
e2.isSuccess(); //false
//ServiceResult{data=[1, 2, 3], message=DefaultMessage{code=00000000, message='success'}, isSuccess=true}
System.out.println(s);
//ServiceResult{data=null, message=DefaultMessage{code=1001, message='錯誤信息。'}, isSuccess=false}
System.out.println(e1);
//ServiceResult{data=null, message=DefaultMessage{code=1000, message='error'}, isSuccess=false}
System.out.println(e2);

補充知識:java 封裝返回結果實體類 返回結果以及錯誤信息

我就廢話不多說了,大家還是直接看代碼吧~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public class ResponseMessage {
  private final static String STATUS_OK = "0";
  private final static String STATUS_ERROR = "1";
 
  private String status;   // 狀態
  private Object data;  // 返回值
  private Exception e;  // 異常類捕獲
  private String msg;  // 自定義信息
 
  public String getStatus() {
    return status;
  }
  public void setStatus(String status) {
    this.status = status;
  }
  public Object getData() {
    return data;
  }
  public void setData(Object data) {
    this.data = data;
  }
  public Exception getE() {
    return e;
  }
  public void setE(Exception e) {
    this.e = e;
  }
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public ResponseMessage() {
    super();
  }
  public ResponseMessage(String status, Object data, Exception e, String msg) {
    super();
    this.status = status;
    this.data = data;
    this.e = e;
    this.msg = msg;
  }
 
  /**
   * 成功的結果
   * @param data 返回結果
   * @param msg 返回信息
   */
  public static ResponseMessage newOkInstance(Object data, String msg) {
    return new ResponseMessage(ResponseMessage.STATUS_OK, data, null, msg);
  }
 
  /**
   * 成功的結果
   * @param data  返回結果
   */
  public ResponseMessage newOkInstance(Object data) {
    return new ResponseMessage(ResponseMessage.STATUS_OK, data, null, null);
  }
 
  /**
   * 失敗的結果
   * @param msg 返回信息
   */
  public static ResponseMessage newErrorInstance(String msg) {
    return new ResponseMessage(ResponseMessage.STATUS_ERROR, null, null, msg);
  }
 
  /**
   * 失敗的結果
   * @param e    異常對象
   * @param msg 返回信息
   */
  public static ResponseMessage newErrorInstance(Exception e, String msg) {
    return new ResponseMessage(ResponseMessage.STATUS_ERROR, null, e, msg);
  }
}

以上這篇Java封裝統一的Result Model案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/m0_38043362/article/details/79696296

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国三级日本三级香港三级黄 | 午夜伦理电影在线观免费 | 国产精品啪啪 | 亚洲欧美日韩成人 | 欧美久草在线 | sese在线观看 | 日韩成人免费aa在线看 | 91影视永久福利免费观看 | 91久久青青草原线免费 | 国产午夜亚洲精品理论片不卡 | 精品久久久久久午夜 | 日本欧美强乱视频在线 | 亚洲国产中文字幕在线视频综合 | 欧美草逼视频 | 国产精品亚洲精品青青青 | 日本一区二区视频免费播放 | 天天操婷婷| 日韩美女强理论片 | 亚洲成在人网站天堂一区二区 | 果冻传媒天美传媒乌鸦传媒 | 国模丰满美女冰漪34d | 日韩 欧美 国产 亚洲 中文 | 91国在线观看 | 99久久精品免费看国产情侣 | 欧美va天堂va视频va在线 | 好深快点再快点好爽视频 | 国产91免费在线 | 国产精品免费 | 精品欧美一区二区三区久久久 | 亚州性夜夜射在线观看 | 精品久久久久久久久免费影院 | 久久re热在线视频精99 | 国产精品久久久久影视不卡 | 午夜一区二区福利视频在线 | 亚洲天堂在线视频播放 | 国产成人精品一区二区仙踪林 | 美女被视频网站 | 精品国产日韩一区三区 | 楚乔传第二部免费播放电视连续剧 | 99久久免费国内精品 | chinese男男gayxxx chinese老头和老太交hd |