ResponseResult.java 3.68 KB
package com.infoloop.tianting.model.common;

import com.infoloop.tianting.constant.ConfigConstants;
import com.infoloop.tianting.exception.BaseEnum;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.slf4j.MDC;

import java.io.Serializable;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "请求结果响应体")
public final class ResponseResult<T> implements Serializable {

    @ApiModelProperty("响应时间戳")
    private final long timestamp = System.currentTimeMillis();

    @ApiModelProperty("提示码")
    private int code;

    @ApiModelProperty("提示消息")
    private String message;

    @ApiModelProperty("数据结果体")
    private T data;

    @ApiModelProperty("请求追踪ID(用于查找日志)")
    private String traceId;

    public static <T> ResponseResult<T> ok() {
        return restResult(ErrorCodeEnum.SUCCESS.getCode(), ErrorCodeEnum.SUCCESS.getMessage(), null);
    }

    public static <T> ResponseResult<T> ok(T data) {
        return restResult(ErrorCodeEnum.SUCCESS.getCode(), ErrorCodeEnum.SUCCESS.getMessage(), data);
    }

    public static <T> ResponseResult<T> failed(int code, String msg, T data) {
        return restResult(code, msg, data);
    }

    public static <T> ResponseResult<T> failed(int code, String msg) {
        return restResult(code, msg, null);
    }

    public static <T> ResponseResult<T> failed(String msg) {
        return restResult(ErrorCodeEnum.FAILED.getCode(), msg, null);
    }

    public static <T> ResponseResult<T> failed(BaseEnum baseEnum, T data) {
        return restResult(baseEnum.getCode(), baseEnum.getMessage(), data);
    }

    public static <T> ResponseResult<T> failed(BaseEnum baseEnum) {
        return restResult(baseEnum.getCode(), baseEnum.getMessage(), null);
    }

    /**
     * 参数验证失败返回结果
     */
    public static <T> ResponseResult<T> validateFailed(String message) {
        return restResult(ErrorCodeEnum.VALIDATE_FAILED.getCode(), message, null);
    }

    /**
     * 未登录返回结果
     */
    public static <T> ResponseResult<T> unauthorized(String message) {
        return restResult(ErrorCodeEnum.UNAUTHORIZED.getCode(), message, null);
    }

    /**
     * 未授权返回结果
     */
    public static <T> ResponseResult<T> forbidden(String message) {
        return restResult(ErrorCodeEnum.FORBIDDEN.getCode(), message, null);
    }

    /**
     * 方法不允许
     */
    public static <T> ResponseResult<T> notAllowed(String message) {
        return restResult(ErrorCodeEnum.NOT_ALLOWED.getCode(), message, null);
    }

    /**
     * 资源未找到
     */
    public static <T> ResponseResult<T> notFound(String message) {
        return restResult(ErrorCodeEnum.RESOURCE_NOT_FOUND.getCode(), message, null);
    }

    /**
     * 请求超时
     */
    public static <T> ResponseResult<T> requestTimeout(String message) {
        return restResult(ErrorCodeEnum.REQUEST_TIMEOUT.getCode(), message, null);
    }

    /**
     * 资源被锁定
     */
    public static <T> ResponseResult<T> locked(String message) {
        return restResult(ErrorCodeEnum.LOCKED.getCode(), message, null);
    }

    private static <T> ResponseResult<T> restResult(int code, String msg, T data) {
        final var apiResult = new ResponseResult<T>();
        apiResult.setCode(code);
        apiResult.setData(data);
        apiResult.setMessage(msg);
        apiResult.setTraceId(MDC.get(ConfigConstants.LOGGING_TRACING_ID));
        return apiResult;
    }

}