0
点赞
收藏
分享

微信扫一扫

通用公共响应结果对象设计

at小涛 2022-01-24 阅读 30
java

通用公共响应结果对象设计

解决的问题

  1. 使用限定泛型系列化Result<T extends Serializable>,避免适用过程中传入未序列化的对象导致序列化问题,从根本解决序列化问题。1
  2. 增加序列化的扩展字段private Serializable extend,在某些场景,我们不仅会返回结果还会返回扩展结果,这时这个字段就很有用,并且这里避免了序列化对象问题。
  3. 封装常用静态响应结果方法,使用时Result.ok(...)一行代码搞定,简单易用。

完整代码

import lombok.Data;

import java.io.Serializable;
import java.util.Collection;

/**
 * 接口公共响应对象
 * @author fay
 * @date 2022-01-24
 */
@Data
public class Result<T extends Serializable> implements Serializable {
    private static final long serialVersionUID = 1L;

    /**请求成功标识*/
    private boolean success = true;
    /**响应码*/
    private Integer code = OK_200;
    /**响应消息*/
    private String message = OK_MSG;
    /**响应对象*/
    private T data;
    /**响应列表*/
    private Collection<T> dataList;
    /**响应扩展*/
    private Serializable extend;
    /**时间戳*/
    private long timestamp = System.currentTimeMillis();

    /**默认响应码:200成功,500失败,401无权限*/
    public static final int OK_200 = 200;
    public static final int ERROR_500 = 500;
    public static final int NO_AUTH_401 = 401;

    /**默认响应消息*/
    public static final String OK_MSG = "成功";
    public static final String ERROR_MSG = "失败";
    public static final String NO_AUTH_MSG = "无权限";

    public static <T extends Serializable> Result<T> ok() {
        return Result.ok(OK_MSG);
    }

    public static <T extends Serializable> Result<T> ok(String message) {
        return Result.ok(null, null, null, message);
    }

    public static <T extends Serializable> Result<T> ok(T data) {
        return Result.ok(data, OK_MSG);
    }

    public static <T extends Serializable> Result<T> ok(T data, String message) {
        return Result.ok(data, null, null, message);
    }

    public static <T extends Serializable> Result<T> ok(Collection<T> dataList) {
        return Result.ok(dataList, OK_MSG);
    }

    public static <T extends Serializable> Result<T> ok(Collection<T> dataList, String message) {
        return Result.ok(null, dataList, null, message);
    }

    public static <T extends Serializable> Result<T> ok(T data, Serializable extend) {
        return Result.ok(data, null, extend, OK_MSG);
    }

    public static <T extends Serializable> Result<T> ok(Collection<T> dataList, Serializable extend) {
        return Result.ok(null, dataList, extend, OK_MSG);
    }

    public static <T extends Serializable> Result<T> error() {
        return Result.error(ERROR_MSG);
    }

    public static <T extends Serializable> Result<T> error(String message) {
        return Result.error(ERROR_500, message);
    }

    public static <T extends Serializable> Result<T> error(Integer code, String message) {
        Result<T> result = new Result<>();
        result.code = code;
        result.message = message;
        result.success = false;
        return result;
    }

    /**
     * 无权访问
     */
    public static <T extends Serializable> Result<T> noAuth() {
        return Result.error(NO_AUTH_401, NO_AUTH_MSG);
    }

    private static <T extends Serializable> Result<T> ok(T data, Collection<T> dataList,
                                                         Serializable extend, String message) {
        Result<T> result = new Result<>();
        result.code = OK_200;
        result.data = data;
        result.dataList = dataList;
        result.extend = extend;
        result.message = message;
        return result;
    }
}

  1. 使用sonar扫描代码能快速得知我们代码里可能存在的风险点及风险级别。 ↩︎

举报

相关推荐

0 条评论