规范统一结果类

前言

因前后端分离,采用JSON格式进行数据交互,为了提高规范性和开发效率,我们需要定义一个统一的结果返回类,而不应该返回 List、Map、Object等各种各样的对象,提高紊乱度。

一、响应状态

通过此Enum规定后端人员返回Http响应状态,不允许在业务代码中私自定义Code,当然可以允许后端开发人员在业务代码中为code附属自定义的msg。

public enum ResponseStatusEnum {
    // 根据需要添加合适的code码
    FAIL(500L, "失败"),
    SUCCESS(200L, "成功");

    private final Long code;
    private final String msg;
    ResponseStatusEnum(Long code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Long getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}
复制代码

二、统一结果返回类

注:如果前端不想在状态码上进行区分是否成功,可以额外添加一个字段区分,eg:private Boolean success;

@Data
public class Result<T> {
    /** 响应状态码 */
    private Long code;
    /** 响应消息 */
    private String msg;
    /** 响应数据 */
    private T data;


    /**
     * 响应成功结果
     * @param msg 响应消息
     * @param data 响应数据
     */
    public static<T> Result<T> ok(String msg, T data) {
        return ok(ResponseStatusEnum.SUCCESS.getCode(), msg, data);
    }

    /**
     * 响应成功结果
     * @param data 响应数据
     */
    public static<T> Result<T> ok(T data) {
        return ok(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), data);
    }

    /**
     * 响应成功结果
     */
    public static<T> Result<T> ok() {
        return ok(ResponseStatusEnum.SUCCESS.getCode(), ResponseStatusEnum.SUCCESS.getMsg(), null);
    }

    /**
     * 响应成功结果
     * @param responseStatusEnum 成功类型的枚举类
     * @param data 响应数据
     */
    public static<T> Result<T> ok(ResponseStatusEnum responseStatusEnum, T data) {
        return ok(responseStatusEnum.getCode(), responseStatusEnum.getMsg(), data);
    }

    /**
     * 响应失败结果
     * @param msg 响应消息
     * @param data 响应数据
     */
    public static<T> Result<T> fail(String msg, T data) {
        return fail(ResponseStatusEnum.FAIL.getCode(), msg, data);
    }

    /**
     * 响应失败结果
     * @param data 响应数据
     */
    public static<T> Result<T> fail(T data) {
        return fail(ResponseStatusEnum.FAIL.getCode(), ResponseStatusEnum.FAIL.getMsg(), data);
    }

    /**
     * 响应失败结果
     */
    public static<T> Result<T> fail() {
        return fail(ResponseStatusEnum.FAIL.getCode(), ResponseStatusEnum.FAIL.getMsg(), null);
    }

    /**
     * 响应失败结果
     * @param responseStatusEnum 失败类型的枚举类
     * @param data 响应数据
     */
    public static<T> Result<T> fail(ResponseStatusEnum responseStatusEnum, T data) {
        return fail(responseStatusEnum.getCode(), responseStatusEnum.getMsg(), data);
    }

    private Result(Long code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 响应成功结果
     * @param code 响应状态码
     * @param msg 响应消息
     * @param data 响应数据
     */
    private static<T> Result<T> ok(Long code, String msg, T data) {
        return new Result<T>(code, msg, data);
    }

    /**
     * 响应失败结果
     * @param code 响应状态码
     * @param msg 响应消息
     * @param data 响应数据
     */
    private static<T> Result<T> fail(Long code, String msg, T data) {
        return new Result<T>(code, msg, data);
    }
}
复制代码