响应体和状态码

后端响应体和状态码设计

主流技术:响应体 和 状态码结合使用

响应体:数据 响应 给前端的 格式

1、为什么要设计统一响应体?

1、系统默认提供许多的状态码,但HTTP的状态码数量有限。

通过修改响应返回的JSON数据,更好的表达业务中遇到的情况。
2、目前后端主流RESTful API的数据接口,提高效率。

2、了解最基础的统一响应体:

建议采用泛型,而不是采用Object。系统结合Swagger2使用时,Object可能有问题,采用泛型设计就能够读取到list中的字段信息。

java 复制代码
/**
 * 统一 响应体(返回类)
 * @param <T> 具体数据对象类型
 */
@Data//自动生成getter、setter、equals、hashCode和toString方法
public class BaseResponse<T> implements Serializable {

    private int code;

    private T data;

    private String message;

    //构造函数:在创建对象时为对象的成员变量赋初始值。不需要用户来调用它,在建立对象时自动执行。
    public BaseResponse(int code, T data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public BaseResponse(int code, T data) {
        this(code, data, "");
    }

    /**
     * 错误 响应体
     * 统一 响应体 调用 错误状态码ErrorCode。
     * ErrorCode 包括 (code + 错误 返回的响应体)
     * @param errorCode
     */
    public BaseResponse(ErrorCode errorCode) {
        this(errorCode.getCode(), null, errorCode.getMessage());
    }
}

3、状态码设计

最好设计:枚举类
错误 状态码

java 复制代码
/**
 * 自定义错误码
 */
public enum ErrorCode {
    /**
     * 组成:错误 状态码 + 错误响应体
     *                  code + message
     */
    SUCCESS(0, "ok"),
    PARAMS_ERROR(40000, "请求参数错误"),
    NOT_LOGIN_ERROR(40100, "未登录"),
    NO_AUTH_ERROR(40101, "无权限"),
    NOT_FOUND_ERROR(40400, "请求数据不存在"),
    FORBIDDEN_ERROR(40300, "禁止访问"),
    SYSTEM_ERROR(50000, "系统内部异常"),
    OPERATION_ERROR(50001, "操作失败");

    /**
     * 错误响应体 状态码
     */
    private final int code;

    /**
     * 错误响应体 信息
     */
    private final String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

4、使用

java 复制代码
/**
 * 返回工具类
 */
public class ResultUtils {

    /**
     * 成功
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> BaseResponse<T> success(T data) {
        return new BaseResponse<>(0, data, "ok");
    }

    /**
     * 失败
     *
     * @param errorCode
     * @return
     */
    public static BaseResponse error(ErrorCode errorCode) {
        return new BaseResponse<>(errorCode);
    }

    /**
     * 失败
     *
     * @param code
     * @param message
     * @return
     */
    public static BaseResponse error(int code, String message) {
        return new BaseResponse(code, null, message);
    }

    /**
     * 失败
     *
     * @param errorCode
     * @return
     */
    public static BaseResponse error(ErrorCode errorCode, String message) {
        return new BaseResponse(errorCode.getCode(), null, message);
    }
}
相关推荐
极光代码工作室32 分钟前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen1 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜2 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
圆山猫2 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v
caishenzhibiao2 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
史呆芬3 小时前
分布式事务实战:微服务跨服务数据一致性解决方案
java·后端·spring cloud
IT界的老黄牛3 小时前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
daad7774 小时前
记录matlab状态机demo
java·网络·matlab
牡丹雅忻14 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
学者猫头鹰4 小时前
Java 8 核心新特性
java