ResponseResult.java 7.79 KB
Newer Older
yanzg's avatar
yanzg committed
1 2 3
package com.yanzuoguang.util.vo;

import com.yanzuoguang.util.contants.ResultConstants;
yanzg's avatar
yanzg committed
4
import com.yanzuoguang.util.exception.CodeException;
yanzg's avatar
yanzg committed
5
import com.yanzuoguang.util.exception.CodeTargetException;
yanzg's avatar
yanzg committed
6
import com.yanzuoguang.util.exception.ExceptionHelper;
yanzg's avatar
yanzg committed
7
import com.yanzuoguang.util.exception.RuntimeCodeException;
yanzg's avatar
yanzg committed
8
import com.yanzuoguang.util.helper.StringHelper;
yanzg's avatar
yanzg committed
9
import io.swagger.annotations.ApiModelProperty;
yanzg's avatar
yanzg committed
10 11

/**
yanzg's avatar
yanzg committed
12
 * 接口之间的通讯结果
yanzg's avatar
yanzg committed
13
 *
yanzg's avatar
yanzg committed
14
 * @author 颜佐光
yanzg's avatar
yanzg committed
15 16 17 18 19 20 21 22
 */
public class ResponseResult<T> extends BaseVo {

    private static final long serialVersionUID = -508702000019378459L;

    /**
     * 请求状态码
     */
yanzg's avatar
yanzg committed
23
    @ApiModelProperty(value = "返回状态", notes = "00表示成功,其他状态表示失败,具体含义参照具体实现接口", required = true, example = "00")
yanzg's avatar
yanzg committed
24 25 26 27 28
    private String code;

    /**
     * 服务消息
     */
yanzg's avatar
yanzg committed
29
    @ApiModelProperty(value = "错误消息", notes = "提示错误消息等等", required = true, example = "查询成功")
yanzg's avatar
yanzg committed
30 31 32 33 34
    private String message;

    /**
     * 返回数据
     */
yanzg's avatar
yanzg committed
35
    @ApiModelProperty(value = "返回数据", notes = "返回的具体数据", required = true)
yanzg's avatar
yanzg committed
36 37
    private T data;

yanzg's avatar
yanzg committed
38 39 40
    /**
     * 数据源,用于显示异常数据
     */
yanzg's avatar
yanzg committed
41
    @ApiModelProperty(value = "异常数据", notes = "当抛出异常时的数据,通常和code进行组合", required = true)
yanzg's avatar
yanzg committed
42
    private Object target;
yanzg's avatar
yanzg committed
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
    /**
     * 是否是code错误
     */
    @ApiModelProperty(value = "异常数据", notes = "当抛出异常时的数据,通常和code进行组合", required = true)
    private boolean codeError = false;

    /**
     * 构造函数
     */
    public ResponseResult() {
        this(ResultConstants.SUCCESS, "操作成功");
    }


    /**
     * 构造函数
     *
     * @param code    结果状态
     * @param message 结果消息
     */
    public ResponseResult(String code, String message) {
        this(code, message, null);
    }

    /**
     * 构造函数
     *
     * @param code    结果状态
     * @param message 结果熊希
     * @param data    结果
     */
    public ResponseResult(String code, String message, T data) {
        this(code, message, data, null);
    }

    /**
     * 构造函数
     *
     * @param code    结果状态
     * @param message 结果熊希
     * @param data    结果
     */
    public ResponseResult(String code, String message, T data, Object target) {
        this.code = code;
        this.message = message;
        this.data = data;
        this.target = target;
    }
yanzg's avatar
yanzg committed
91

yanzg's avatar
yanzg committed
92
    /**
yanzg's avatar
yanzg committed
93
     * 检查数据是否合法,不合法则抛出异常,合法则返回数据
yanzg's avatar
yanzg committed
94
     */
yanzg's avatar
yanzg committed
95
    public T check() {
yanzg's avatar
yanzg committed
96
        if (StringHelper.compare(code, ResultConstants.SUCCESS)) {
yanzg's avatar
yanzg committed
97
            return this.data;
yanzg's avatar
yanzg committed
98
        }
yanzg's avatar
yanzg committed
99

yanzg's avatar
yanzg committed
100 101 102 103
        if (this.codeError && this.target != null) {
            throw new CodeTargetException(this.code, this.message, this.target);
        } else if (this.codeError) {
            throw new CodeException(this.code, this.message);
yanzg's avatar
yanzg committed
104 105 106
        } else {
            throw new RuntimeCodeException(this.code, this.message, this.target);
        }
yanzg's avatar
yanzg committed
107 108
    }

yanzg's avatar
yanzg committed
109 110 111
    /**
     * 获取结果状态码
     *
yanzg's avatar
yanzg committed
112
     * @return 状态码
yanzg's avatar
yanzg committed
113 114 115 116 117 118 119 120
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置请求结果状态码
     *
yanzg's avatar
yanzg committed
121
     * @param code 状态码
yanzg's avatar
yanzg committed
122 123 124 125 126 127 128 129
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取结果消息
     *
yanzg's avatar
yanzg committed
130
     * @return 消息内容
yanzg's avatar
yanzg committed
131 132 133 134 135 136 137 138
     */
    public String getMessage() {
        return message;
    }

    /**
     * 设置结果消息
     *
yanzg's avatar
yanzg committed
139
     * @param message 消息
yanzg's avatar
yanzg committed
140 141 142 143 144 145 146 147
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 获取数据
     *
yanzg's avatar
yanzg committed
148
     * @return 数据
yanzg's avatar
yanzg committed
149 150 151 152 153 154 155 156
     */
    public T getData() {
        return data;
    }

    /**
     * 设置数据
     *
yanzg's avatar
yanzg committed
157
     * @param data 数据
yanzg's avatar
yanzg committed
158 159 160 161 162
     */
    public void setData(T data) {
        this.data = data;
    }

yanzg's avatar
yanzg committed
163 164 165 166 167 168 169 170 171 172 173 174
    /**
     * 获取数据源
     *
     * @return 数据源
     */
    public Object getTarget() {
        return target;
    }

    /**
     * 设置数据源
     *
yanzg's avatar
yanzg committed
175
     * @param target 目标
yanzg's avatar
yanzg committed
176 177 178 179 180
     */
    public void setTarget(Object target) {
        this.target = target;
    }

yanzg's avatar
yanzg committed
181
    /**
yanzg's avatar
yanzg committed
182
     * 是否是code错误
yanzg's avatar
yanzg committed
183
     *
yanzg's avatar
yanzg committed
184
     * @return 是否是code错误
yanzg's avatar
yanzg committed
185
     */
yanzg's avatar
yanzg committed
186 187
    public boolean isCodeError() {
        return codeError;
yanzg's avatar
yanzg committed
188 189 190
    }

    /**
yanzg's avatar
yanzg committed
191
     * 设置code错误
yanzg's avatar
yanzg committed
192
     *
yanzg's avatar
yanzg committed
193
     * @param codeError code错误
yanzg's avatar
yanzg committed
194
     */
yanzg's avatar
yanzg committed
195 196
    public void setCodeError(boolean codeError) {
        this.codeError = codeError;
yanzg's avatar
yanzg committed
197 198 199 200 201 202 203 204 205
    }

    /**
     * 构造成功结果
     *
     * @param data 数据
     * @param <T>  数据类型
     * @return 一个请求成功的数据集合
     */
yanzg's avatar
yanzg committed
206
    public static <T> ResponseResult<T> result(T data) {
yanzg's avatar
yanzg committed
207 208 209 210 211 212 213 214 215 216
        return result(data, false);
    }

    /**
     * 构造成功结果,不允许为空
     *
     * @param data 数据
     * @param <T>  数据类型
     * @return 一个请求成功的数据集合
     */
yanzg's avatar
yanzg committed
217
    public static <T> ResponseResult<T> resultAllowNull(T data) {
yanzg's avatar
yanzg committed
218 219 220 221 222 223 224 225 226 227 228 229
        return result(data, true);
    }


    /**
     * 构造成功结果
     *
     * @param data      数据
     * @param allowNull 允许为空
     * @param <T>       数据类型
     * @return 一个请求成功的数据集合
     */
yanzg's avatar
yanzg committed
230 231
    public static <T> ResponseResult<T> result(T data, boolean allowNull) {
        ResponseResult<T> ret = new ResponseResult<>();
yanzg's avatar
yanzg committed
232
        ret.setData(data);
yanzg's avatar
yanzg committed
233 234 235 236
        initDataStatus(ret, data, allowNull);
        return ret;
    }

yanzg's avatar
yanzg committed
237
    protected static void initDataStatus(ResponseResult<?> ret, Object data, boolean allowNull) {
yanzg's avatar
yanzg committed
238 239 240 241 242 243 244
        if (!allowNull && StringHelper.isEmpty(data)) {
            ret.setCode(ResultConstants.RESULT_EMPTY);
            ret.setMessage("结果为空");
        } else {
            ret.setCode(ResultConstants.SUCCESS);
            ret.setMessage("处理成功");
        }
yanzg's avatar
yanzg committed
245
    }
yanzg's avatar
yanzg committed
246

yanzg's avatar
yanzg committed
247
    public static final ResponseResult<?> OK = new ResponseResult<>();
yanzg's avatar
yanzg committed
248

yanzg's avatar
yanzg committed
249 250 251
    /**
     * 处理错误
     *
yanzg's avatar
yanzg committed
252 253 254
     * @param target 错误源对象
     * @return 处理的错误
     */
yanzg's avatar
yanzg committed
255
    public static ResponseResult<?> error(Object target) {
yanzg's avatar
yanzg committed
256 257 258 259 260 261 262 263 264 265
        return error(ResultConstants.UNKNOW_ERROR, "未知异常", target);
    }

    /**
     * 处理错误
     *
     * @param code    错误码
     * @param message 错误消息
     * @return 处理的错误
     */
yanzg's avatar
yanzg committed
266
    public static ResponseResult<?> error(String code, String message) {
yanzg's avatar
yanzg committed
267 268 269 270 271 272 273 274 275 276
        return error(code, message, null);
    }

    /**
     * 处理错误
     *
     * @param message 错误消息
     * @param target  错误标记
     * @return 处理的错误
     */
yanzg's avatar
yanzg committed
277
    public static ResponseResult<?> error(String message, Object target) {
yanzg's avatar
yanzg committed
278 279 280 281 282 283 284 285 286
        return error(ResultConstants.UNKNOW_ERROR, message, target);
    }

    /**
     * 处理错误
     *
     * @param ex 错误消息
     * @return 处理的错误
     */
yanzg's avatar
yanzg committed
287
    public static ResponseResult<?> error(Exception ex) {
yanzg's avatar
yanzg committed
288
        return ExceptionHelper.getError(ex);
yanzg's avatar
yanzg committed
289 290 291 292 293 294 295 296 297
    }

    /**
     * 处理错误
     *
     * @param code    错误码
     * @param message 错误消息
     * @param target  错误标记
     * @return 处理的错误
yanzg's avatar
yanzg committed
298
     */
yanzg's avatar
yanzg committed
299
    public static ResponseResult<?> error(String code, String message, Object target) {
yanzg's avatar
yanzg committed
300
        return new ResponseResult<>(code, message, null, target);
yanzg's avatar
yanzg committed
301
    }
yanzg's avatar
yanzg committed
302 303 304 305 306 307

    /**
     * 抛出异常
     *
     * @param ex  异常信息
     * @param cls 返回类型
yanzg's avatar
yanzg committed
308 309 310
     * @param <T> 处理空数据的类型
     * @param <M> 异常类型
     * @return 正常空数据
yanzg's avatar
yanzg committed
311
     */
yanzg's avatar
yanzg committed
312
    public static <T, M extends Exception> T isEmpty(M ex, Class<T> cls) throws M {
yanzg's avatar
yanzg committed
313 314
        if (ex instanceof CodeException) {
            CodeException codeException = (CodeException) ex;
yanzg's avatar
yanzg committed
315
            if (StringHelper.compare(codeException.getCode(), ResultConstants.RESULT_EMPTY)) {
yanzg's avatar
yanzg committed
316 317 318 319 320 321
                return null;
            }
            throw ex;
        }
        throw ex;
    }
yanzg's avatar
yanzg committed
322
}