潘志宝
3 天以前 b8a0affd03b5fa9fa33cd6f870e90394c2df86c7
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.common.pojo;
H 2
d66edb 3 import cn.hutool.core.lang.Assert;
e7c126 4 import com.iailab.framework.common.exception.ErrorCode;
H 5 import com.iailab.framework.common.exception.ServiceException;
6 import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants;
7 import com.fasterxml.jackson.annotation.JsonIgnore;
d66edb 8 import com.iailab.framework.common.exception.util.ServiceExceptionUtil;
e7c126 9 import lombok.Data;
H 10
11 import java.io.Serializable;
12 import java.util.Objects;
13
14 /**
15  * 通用返回
16  *
17  * @param <T> 数据泛型
18  */
19 @Data
20 public class CommonResult<T> implements Serializable {
21
22     /**
23      * 错误码
24      *
25      * @see ErrorCode#getCode()
26      */
27     private Integer code;
28     /**
29      * 返回数据
30      */
31     private T data;
32     /**
33      * 错误提示,用户可阅读
34      *
35      * @see ErrorCode#getMsg() ()
36      */
37     private String msg;
38
39     /**
40      * 将传入的 result 对象,转换成另外一个泛型结果的对象
41      *
42      * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。
43      *
44      * @param result 传入的 result 对象
d66edb 45      * @param <T> 返回的泛型
e7c126 46      * @return 新的 CommonResult 对象
H 47      */
48     public static <T> CommonResult<T> error(CommonResult<?> result) {
49         return error(result.getCode(), result.getMsg());
50     }
51
52     public static <T> CommonResult<T> error(Integer code, String message) {
d66edb 53         cn.hutool.core.lang.Assert.notEquals(GlobalErrorCodeConstants.SUCCESS.getCode(), code, "code 必须是错误的!");
e7c126 54         CommonResult<T> result = new CommonResult<>();
H 55         result.code = code;
56         result.msg = message;
d66edb 57         return result;
H 58     }
59
60     public static <T> CommonResult<T> error(ErrorCode errorCode, Object... params) {
61         Assert.notEquals(GlobalErrorCodeConstants.SUCCESS.getCode(), errorCode.getCode(), "code 必须是错误的!");
62         CommonResult<T> result = new CommonResult<>();
63         result.code = errorCode.getCode();
64         result.msg = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMsg(), params);
e7c126 65         return result;
H 66     }
67
68     public static <T> CommonResult<T> error(ErrorCode errorCode) {
69         return error(errorCode.getCode(), errorCode.getMsg());
70     }
71
72     public static <T> CommonResult<T> success(T data) {
73         CommonResult<T> result = new CommonResult<>();
74         result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
75         result.data = data;
76         result.msg = "";
449017 77         return result;
D 78     }
79
e7c126 80     public static boolean isSuccess(Integer code) {
H 81         return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
82     }
83
84     @JsonIgnore // 避免 jackson 序列化
85     public boolean isSuccess() {
86         return isSuccess(code);
87     }
88
89     @JsonIgnore // 避免 jackson 序列化
90     public boolean isError() {
91         return !isSuccess();
92     }
93
94     // ========= 和 Exception 异常体系集成 =========
95
96     /**
97      * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
98      */
99     public void checkError() throws ServiceException {
100         if (isSuccess()) {
101             return;
102         }
103         // 业务异常
104         throw new ServiceException(code, msg);
105     }
106
107     /**
108      * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
109      * 如果没有,则返回 {@link #data} 数据
110      */
111     @JsonIgnore // 避免 jackson 序列化
112     public T getCheckedData() {
113         checkError();
114         return data;
115     }
116
117     public static <T> CommonResult<T> error(ServiceException serviceException) {
118         return error(serviceException.getCode(), serviceException.getMessage());
119     }
120
121 }