响应体和状态码

后端响应体和状态码设计

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

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

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);
    }
}
相关推荐
用户3721574261358 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊9 小时前
Java学习第22天 - 云原生与容器化
java
渣哥11 小时前
原来 Java 里线程安全集合有这么多种
java
间彧11 小时前
Spring Boot集成Spring Security完整指南
java
间彧11 小时前
Spring Secutiy基本原理及工作流程
java
Java水解12 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆14 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学15 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole15 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊15 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端