表现层(controller)与前端数据传输协议定义(统一结果封装)

为啥需要统一封装传输到前端的数据信息

  1. 随着业务的增长,我们需要返回的数据类型越来越多。如果按照正常的返回值类型把数据传输到前端,对于前端开发人员在解析数据的时候就比较凌乱了
    • 因为前端接收到的数据格式太多了,这不便于前端人员的开发。
    • 所以对于前端来说,如果后台能够返回一个统一的数据结果,前端在解析的时候就可以按照一种方式进行解析。开发就会变得更加简单,降低前端人员的开发能力。

如何统一封装传输到前端的数据信息

  1. 创建一个模型类:
      1. 操作的结果(即操作是否成功)封装到code属性中。
      1. 操作的返回数据(即操作是否成功)封装数据到data属性中
      1. 操作失败的信息(产生错误的原因啊、异常啊等等的特殊信息)封装到message(msg)属性中
public class Result{
	private Object data;  //封装数据
	private Integer code;  //封装返回结果
	private String msg;  //封装异常信息等等
}

注意:Result类名及类中的字段并不是固定的,还可以根据需要自行增减提供若干个构造方法,方便操作。

@Data的使用

Result类:这里的code属性,需要使用到一个常量类。

@Data
public class Result {
    private Object data;
    private Integer code;
    private String msg;

    public Result() {
    }

//        操作成功的方法
    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }

//        操作失败的方法
    public Result(Integer code, Object data, String msg) {
        this.data = data;
        this.code = code;
        this.msg = msg;
    }
}

Code常量类:(根据需求进行封装)

public class Code {
    public static final Integer SAVE_OK = 2010;  //添加操作成功
    public static final Integer DELETE_OK = 2020;  //删除操作成功
    public static final Integer UPDATE_OK = 2030; //修改操作成功
    public static final Integer GET_OK = 2040; //查询操作成功

    public static final Integer SAVE_ERR = 20011; //添加操作失败
    public static final Integer DELETE_ERR = 20021;//删除操作失败
    public static final Integer UPDATE_ERR = 20031;//更新操作失败
    public static final Integer GET_ERR = 20041;//查询操作失败

    public static final Integer SYSTEM_ERR = 3001; //系统异常
    public static final Integer SYSTEM_TIMEOUT_ERR = 3002;//系统超时
    public static final Integer SYSTEM_UNKNOW_ERR = 3003; //系统发生不知道的异常

    public static final Integer BUSINESS_ERR = 60002; //发生自定义异常

}

另一种Result的展示:

/**
 * 后端统一返回结果
 * @param 
 */
@Data //这个注解表示:getter、setter、toString、equals,hashCode等操作的快速添加。
public class Result<T> {  //T是泛型,就是要返回的结果数据的类型,也可以不写,不写就表示Object

    private Integer code; //编码:1成功,0和其它数字为失败,也可以另外定义一个code的常量类,指定哪个code代表什么含义
    private String msg; //错误信息
    private T data; //数据

//操作成功则不需要传入msg属性
    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

//操作失败则需要传入msg属性,说明发生了什么bug
    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}

表现层(controller)与前端数据传输协议定义(统一结果封装)_第1张图片

你可能感兴趣的:(spring,java,ssm,结果封装)