好处:
后端统一返回格式,前端可以:
1.根据错误码做合适的展示,避免盲目等待、重复请求、无奈刷新。
2.根据页面当前的分页方式,对数据做相应处理。
后台:
后端主要使用类:R ResultCode:
首先是R,针对这个类我的考虑是其他类引用时会更加的方便,那么做泛型设计,静态的build都是个不错的选择。ResultCode 这个类的设计是将状态码和状态信息进行绑定,那么可以增加复用性。当需要新的message时,只要在ResultcodeEnum 新增一个枚举类型。看完这个类之后再下面讲讲枚举类的设计。

1.定义统一规范的枚举类:

package com.enation.app.javashop.core.video;


/**
 * @desc 请求状态枚举
 *       后续状态若太多,可以考虑使用继承等方式拓展。
 * @slice zhaozhe 2020-8-16 16:48:44
 */
public enum ResultCode {

    /**
     * 广义通用
     */
    SUCCESS(1, "成功"),
    ERROR(-1, "错误"),
    NOT_FOUND(-404, "没有找到资源"),
    NOT_EMPTY(-400, "字段不能为空"),
    DUPLICATE_EXCEPTION(-200, "重复异常"),

    /**
     * 规约:时间异常类 value定义区间为 -100 ~ -199
     */
    TIME_EMPTY(-100, "时间不能为空"),
    TIME_MORE_THAN_14_DAYS(-101, "时间跨度不能超过两个星期"),

    /**
     * 规约:字段为空 value区间 -200 ~ -299
     */
    OPENID_EMPTY(-201, "openid不能为空");
    private int value;

    private String msg;

    ResultCode(int value, String msg) {
        this.value = value;
        this.msg = msg;
    }

    public int getValue() {
        return value;
    }

    public String getMsg() {
        return msg;
    }
}

2.对Controller的结果输出 

package com.enation.app.javashop.core.video;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

/**
 * @desc 后端返回统一的结果集,例如包括状态码等信息,可以让前端更好的进行页面的展示。
 *       封装这样一个结果集有通用且常用的几个属性:
 *          code: 状态码
 *          message:状态信息
 *          data:返回数据
 *       后端统一返回格式,前端可以:根据错误码做合适的展示,避免盲目等待、重复请求、无奈刷新。
 *                              根据页面当前的分页方式,对数据做相应处理。
 * @param <T>
 * @since zhaozhe 2020-8-16 16:42:32
 * @explain 后端主要使用类:R ResultCode
 *          首先是R,针对这个类我的考虑是其他类引用时会更加的方便,那么做泛型设计,静态的build都是个不错的选择。ResultCode 这个类的设计是将状态码和状态信息进行绑定,那么可以增加复用性。当需要新的message时,只要在ResultcodeEnum 新增一个枚举类型。看完这个类之后再下面讲讲枚举类的设计。
 */

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class R<T> {

    private Integer code;
    private String message;

    /**
     * data的总条数,在没有确定data类型时初始化为0显然不太合理。
     */
    private Integer total;
    private T data;

    public static <T> R<T> build(Integer code, String message, Integer total, T data) {
        return new R<>(code, message, total, data);
    }

    public static <T> R<T> build(ResultCode resultCode, String message, Integer total, T data) {
        return new R<>(resultCode, message, total, data);
    }

    public static <T> R<T> error(ResultCode resultCode) {
        return new R<>(resultCode);
    }

    public static <T> R<T> error(ResultCode resultCode, String message) {
        return new R<>(resultCode, message);
    }

    public static <T> R<T> success() {
        return new R<>(ResultCode.SUCCESS);
    }


    public static <T> R<T> client(T data) {
        return new R<>(data);
    }

    public static <T> R<T> server(Integer total, T data) {
        return new R<>(total, data);
    }


    /**
     * 有错误的情况下需要传递错误码 + 错误提示
     *
     * @param code
     * @param message
     */
    private R(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    private R(ResultCode resultCode, String message) {
        this.code = resultCode.getValue();
        this.message = message;
    }

    private R(ResultCode resultCode) {
        this.code = resultCode.getValue();
        this.message = resultCode.getMsg();
    }

    /**
     * 客户端分页,只需要数据 data
     *
     * @param data
     */
    private R(T data) {
        this.code = ResultCode.SUCCESS.getValue();
        this.message = ResultCode.SUCCESS.getMsg();
        this.data = data;
    }

    /**
     * 服务端分页,data + total
     *
     * @param total
     * @param data
     */
    private R(Integer total, T data) {
        this.code = ResultCode.SUCCESS.getValue();
        this.message = ResultCode.SUCCESS.getMsg();;
        this.total = total;
        this.data = data;
    }

    private R(Integer code, String message, Integer total, T data) {
        this.code = code;
        this.message = message;
        this.total = total;
        this.data = data;
    }

    private R(ResultCode resultCode, String message, Integer total, T data) {
        this.code = resultCode.getValue();
        this.message = message;
        this.total = total;
        this.data = data;
    }

    private R() {}
}

3.试用结果

@ApiOperation(value = "添加视频流类型设置", response = VideoSetDO.class)
    @PostMapping("/category/add")
    public R add(@Valid @RequestBody VideoCategoryVO category) {
        // @Valid 是hibernate验证,详情请百度
        try {
            VideoCategoryDO videoCategoryDO = new VideoCategoryDO();
            BeanUtil.copyProperties(category, videoCategoryDO);
            this.videoSetManager.editCategory(videoCategoryDO, id);
            return R.client(category);
        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
            return R.error(ResultCode.ERROR, e.getMessage());
        }

    }

返回结果

java ResultSet使用方法_状态码

本文总结于网上博客 。。。