高复用服务相应对象的设计思想和封装

/ Java / 0 条评论 / 2186浏览

前言

服务端响应客户端request请求,返回response,这一动作在前后端交互时不断产生,由此想到将其抽象出来作为一个高复用的服务响应对象

参数

设计思路

首先我们使用了带有泛型的数据对象作为数据的载体,这样做的好处是:在服务器返回时,可以指定泛型里的内容,亦可以不去指定,比较灵活。

其次,这是一个服务响应对象,为了防止数据篡改,所以所有的构造方法都是私有的,我们会开放供外部使用的共有方法创建它。

代码

// 序列化json时,如果是null的对象也会消失
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServerResponse<T> implements Serializable {

    private int status;
    private String msg;
    private T data;

    private ServerResponse(int status) {
        this.status = status;
    }

    private ServerResponse(int status, T data) {
        this.status = status;
        this.data = data;
    }

    private ServerResponse(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    private ServerResponse(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    // 使之不存在于json序列化中
    @JsonIgnore
    public boolean isSuccess() {
        return this.status == ResponseCode.SUCCESS.getCode();
    }

    public int getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }

    public T getData() {
        return data;
    }

    /**
     * 对外构造器
     *
     * @return 根据入参调用不同的私有构造器创建对象
     */
    // 登陆成功
    public static <T> ServerResponse<T> createBySuccess() {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
    }

    // 登陆成功并返回消息
    public static <T> ServerResponse<T> createBySuccessMessage(String msg) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg);
    }

    // 登陆成功并返回数据
    public static <T> ServerResponse<T> createBySuccess(T data) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), data);
    }

    // 登陆成功返回消息和数据
    public static <T> ServerResponse<T> createBySuccess(String msg, T data) {
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);
    }

    // 登陆失败
    public static <T> ServerResponse<T> createByError() {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
    }

    // 登陆失败并返回消息(提示)
    public static <T> ServerResponse<T> createByErrorMessage(String errorMessage) {
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), errorMessage);
    }

    // 登陆失败返回错误类型和消息
    public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode, String errorMessage) {
        return new ServerResponse<T>(errorCode, errorMessage);
    }

}