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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: a级黄色网 | 99精品热线在线观看免费视频 | 国产午夜精品理论片 | china国产bbw | 国色天香社区视频免费高清在线观看 | 日本不卡在线一区二区三区视频 | 亚洲激情网站 | 久久综合中文字幕佐佐木希 | 激情亚洲| 国产精品林美惠子在线观看 | 午夜影视免费 | 波多野结衣一区免费作品 | 情人我吃糖果小说 | 含羞草国产亚洲精品岁国产精品 | 日本美女视频韩国视频网站免费 | 日本mature乱子视频 | 美女隐私部位视频网站 | 国产特黄一级一片免费 | 国产精品男人的天堂 | 九九免费高清在线观看视频 | 国产xxx在线| 青草影院在线观看 | 亚洲热在线视频 | 美女的隐私视频免费看软件 | 国产大胆歌舞团网站 | 99精品免费在线观看 | 国产成人啪精品午夜在线观看 | 91.prom在线观看国产 | 成年人在线视频免费观看 | 免费在线看片网站 | 久久久91精品国产一区二区 | 色播艾小青国产专区在线播放 | 果冻传媒林予曦图片 | 青青热久麻豆精品视频在线观看 | 亚洲欧美另类在线观看 | 亚洲午夜精品久久久久久抢 | 国产香蕉久久 | 国产亚洲综合成人91精品 | 亚洲国产精品91 | 羞羞答答影院在线 | 免费国产一级 |