SpringBoot请求响应内容统一处理

文章描述了一个用于API响应的泛型类ApiResult,该类包含了状态码(code),数据(data)和消息(message)字段,支持多种构造方法和静态工厂方法以创建成功或失败的响应。同时,定义了一个枚举类ResultCodes,包含了HTTP状态码和自定义错误代码,每个枚举值带有对应的描述信息。
摘要由CSDN通过智能技术生成

1.定义返回实体类

import java.io.Serializable;

public class ApiResult<T> implements Serializable {
    private static final long serialVersionUID = -7202943016570124163L;
    private Integer code;
    private T data;
    private String message;

    public ApiResult() {
    }

    public ApiResult(Integer code) {
        this(code, (T)null, (String)null);
    }

    public ApiResult(Integer code, T data) {
        this(code, data, (String)null);
    }

    public ApiResult(Integer code, String message) {
        this(code, (T)null, message);
    }

    public ApiResult(Integer code, T data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public static <T> ApiResult<T> success() {
        return success((T)null, "success");
    }

    public static <T> ApiResult<T> success(T data) {
        return success(data, "success");
    }

//    public static <T> ApiResult<T> success(String message) {
//        return success((T)null, message);
//    }

    public static <T> ApiResult<T> success(T data, String message) {
        return new ApiResult(ResultCodes.SUCCESS.getValue(), data, message);
    }

    public static <T> ApiResult<T> fail(Integer code) {
        return fail(code, (T)null, "failed");
    }

    public static <T> ApiResult<T> fail(Integer code, T data) {
        return fail(code, data, "failed");
    }

    public static <T> ApiResult<T> fail(Integer code, String message) {
        return fail(code, (T)null, message);
    }

    public static <T> ApiResult<T> fail(Integer code, T data, String message) {
        return new ApiResult(code, data, message);
    }

    public static <T> ApiResult<T> fail(ResultCodes codes) {
        return fail(codes.getValue(), (T)null, codes.getDescription());
    }
    public Integer getCode() {
        return this.code;
    }

    public T getData() {
        return this.data;
    }

    public String getMessage() {
        return this.message;
    }

    public void setCode(final Integer code) {
        this.code = code;
    }

    public void setData(final T data) {
        this.data = data;
    }

    public void setMessage(final String message) {
        this.message = message;
    }


}

2.状态码枚举类

/**
 * @Description: 结果编码(默认使用 Http 协议定义的状态) 如需要自定义编码从 1XXX 开始
 */
public enum ResultCodes {

    /**
     * 响应成功
     */
    SUCCESS(HttpStatus.OK),
    /**
     * 参数错误,无效请求
     */
    BAD_REQUEST(HttpStatus.BAD_REQUEST),
    /**
     * 账号未登录或登录失效
     */
    UNAUTHORIZED(HttpStatus.UNAUTHORIZED),
    /**
     * 账号没有权限
     */
    FORBIDDEN(HttpStatus.FORBIDDEN),
    /**
     * 禁用请求中指定的方法
     */
    METHOD_NOT_ALLOWED(HttpStatus.MULTI_STATUS),

    /**
     * 服务器等候请求时发生超时
     */
    REQUEST_TIMEOUT(HttpStatus.REQUEST_TIMEOUT),

    /**
     * 服务错误
     */
    SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR),

    /**
     * 以上是复用 http code,三位数字
     *
     * 以下是自定义code,四位数字
     */

    FORBIDDEN_LOGIN(4001, "no authorize to access core backend"),

    TOKEN_EXPIRE(4002, "token expire"),

    TOKEN_NOT_VALID(4003, "token parse fail"),

    TOKEN_NOT_EXIST(4004, "token not exist"),

    DATA_NOT_FOUND(5001, "data not found !"),
    
    WECHAT_API_ERROR(5002, "wechat api error . "),


    NEED_CHOOSE_MODULE(5003, "you need to choose one module"),

    DATA_EXITS(5004, "data already exits !"),

    WECOM_SERVER_SESSION_KEY_EXPIRE(5005, "wecom server cache session key expire . "),

    MINIAPP_SESSION_EXPIRE(6001, "miniapp session expire. "),

    TARGET_STOCK_NOT_ENOUGH(7001,"所选门店库存不足,请重新选择"),

    INSUFFICIENT_POINTS(7002,"Insufficient points."),

    POINT_DEDUCTION_FAILED(7003,"Point deduction failed."),

    EXCHANGE_VOUCHER_FAILED(7004,"Failed to issue exchange voucher."),

    STOCK_NOT_ENOUGH(7005,"库存不足,兑换失败"),

    LOW_MEMBER_LEVEL(7006,"会员等级不满足条件"),


            ;

    private final int value;

    private final String description;

    ResultCodes(int value, String description) {
        this.value = value;
        this.description = description;
    }

    ResultCodes(HttpStatus httpStatus) {
        this.value = httpStatus.value();
        this.description = httpStatus.getReasonPhrase();
    }

    public int getValue() {
        return value;
    }

    public String getDescription() {
        return description;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值