激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产精久久久久久久 | 久久久久久久91 | 久久激情小视频 | 欧美一级毛片一级毛片 | 久久国产精品区 | 韩国一大片a毛片 | 91精品久久久久久 | 国产精选在线 | 在线免费av网站 | 日本在线视频免费观看 | 国产成人在线免费看 | 一区在线视频观看 | 亚洲人成中文字幕在线观看 | 4480午夜| 日日操夜 | 国产一区二区欧美精品 | 夜添久久精品亚洲国产精品 | 久久久麻豆 | 草莓福利社区在线 | 亚洲av一级毛片特黄大片 | 国产美女视频一区二区三区 | 久久久久久久久久久久久久av | 免费看成年人视频在线 | 亚洲国产视频网 | 国产精品久久久在线观看 | 成年人免费黄色片 | 毛片免费一区二区三区 | 九色国产| 久久恋 | 男女一边摸一边做羞羞视频免费 | 精品国产一区二区三 | 久草最新在线 | 竹内纱里奈55在线观看 | 国产午夜精品在线 | 精品国产91久久久 | 在线成人免费观看视频 | 黄网站在线免费看 | av电影免费在线看 | 九九看片| 国产精品久久久久久久久久三级 | 日本xxxx视频 |