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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
@Data
@Accessors(chain = true)
public class ResponseData<R extends Object> implements Serializable {
@JSONField(ordinal = 0)
public boolean succeed() {
return null == this.error;
}
@JSONField(ordinal = 1)
private R result;
@JSONField(ordinal = 2)
private Error error;
@JSONField(ordinal = 3)
public long getTimestamp() {
return System.currentTimeMillis();
}
public static <R> ResponseData<R> withSucceed(Boolean succeed) {
return ResponseData.withSucceed(succeed, null);
}
public static <R> ResponseData<R> withSucceed(Boolean succeed, String ifFailureDescription) {
return ResponseData.withSucceed(succeed, null, ifFailureDescription);
}
public static <R> ResponseData<R> withSucceed(Boolean succeed, ResponseError ifFailureError,
String ifFailureDescription) {
// succeed ? 操作成功 : 操作失败,请重试。
return succeed ? ResponseData.ok()
: ResponseData.failure(
null != ifFailureError ? ifFailureError : ResponseError.BUSINESS_ERROR,
null != ifFailureDescription ? ifFailureDescription : "操作失败,请重试。");
}
public static <R> ResponseData<R> ok() {
return ResponseData.ok(null);
}
public static <R> ResponseData<R> ok(R result) {
return new ResponseData<R>().setResult(result);
}
/**
* 未知错误 (error_code = -1).
*
* @return
* <pre>
* {
* succeed: false,
* timestamp: 1525555307441,
* error: {
* error_code: -1,
* error_reason: "unknown_error",
* error_description: "未知错误"
* }
* }
* </pre>
*/
public static <R> ResponseData<R> failure() {
return ResponseData.failure(ResponseError.UNKNOWN_ERROR);
}
public static <R> ResponseData<R> failure(String message) {
return ResponseData.failure(ResponseError.BUSINESS_ERROR, message);
}
/**
* 系统级别的异常 (error_code = 1000).
*
* @return
* <pre>
* {
* succeed: false,
* timestamp: 1525555307441,
* error: {
* error_code: 1000,
* error_reason: "server_error",
* error_description: "服务器内部异常[java.lang.NullPointerException]"
* }
* }
* </pre>
*/
public static <R> ResponseData<R> failure(@NonNull Throwable throwable) {
ResponseError error = ResponseError.SERVER_ERROR;
String throwMessage = throwable.getMessage();
String description = String.format("%s[%s]",
null != throwMessage ? throwMessage : error.getDescription(),
throwable.getClass().getTypeName());
return ResponseData.failure(error.getCode(), error.getReason(), description);
}
/**
* 使用系统定义的错误消息.
*
* @see ResponseData#failure(ResponseError, String)
*/
public static <R> ResponseData<R> failure(ResponseError error) {
return ResponseData.failure(error, null);
}
/**
* 使用系统定义的错误消息.
*
* @param error 错误枚举
* @param newDescription 覆盖默认的消息提示
* @return ResponseData
*/
public static <R> ResponseData<R> failure(@NonNull ResponseError error, String newDescription) {
return ResponseData.failure(error.getCode(), error.getReason(),
null != newDescription ? newDescription : error.getDescription());
}
/**
* 自定义错误消息.
*
* @return
* <pre>
* {
* succeed: false,
* timestamp: 1525555307441,
* error: {
* error_code: errorCode,
* error_reason: errorReason,
* error_description: errorDescription
* }
* }
* </pre>
*/
public static <R> ResponseData<R> failure(int errorCode, @NonNull String errorReason,
@NonNull String errorDescription) {
return new ResponseData().setError(new Error(errorCode, errorReason, errorDescription));
}
@Override
public String toString() {
return JSON.toJSONString(this, true);
}
@Data
@AllArgsConstructor
@Accessors(chain = true)
private static class Error {
@JSONField(name = "error_code", ordinal = 0)
private int errorCode;
@JSONField(name = "error_reason", ordinal = 1)
private String errorReason;
@JSONField(name = "error_description", ordinal = 2)
private String errorDescription;
}
}
|
评论