高复用服务响应对象的设计思想以及抽象封装

1. 用途

作为控制层统一返回对象

2. 参数

status:状态 int

  • msg:返回信息 String
  • data:范型对象 T
    //返回状态
    private int status;
    //返回信息
    private String msg;
    //返回对象
    private T data;

3. 私有构造器

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     */
    private ServerResponse(int status){
        this.status = status;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param msg
     */
    private ServerResponse(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param data
     */
    private ServerResponse(int status, T data) {
        this.status = status;
        this.data = data;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param msg
     * @param data
     */
    private ServerResponse(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

  • 疑问
    //疑问,当存在T为String的时候,ServerResponse(int status, T data)
    // 和ServerResponse(int status, String msd)调用哪一个?
  • 解决
    public static void main(String[] args){
        ServerResponse s1 = new ServerResponse(1, new Object());
        ServerResponse s2 = new ServerResponse(1, "ss");
        System.out.println("aaa");//加入断点调试
    }
  • 调试结果:

在这里插入图片描述

4. 设置返回状态码

/**
 * 返回状态码
 */
public enum ResponseCode {

    SUCCESS(0,"SUCCESS"),
    
    ERROR(1,"ERROR"),
    
    NEED_LOGIN(10, "NEED_LOGIN"),
    
    ILLEGAL_ARGUMENT(2, "ILLEGAL_ARGUMENT");


    private final int code;
    
    private final String desc;
    
    //必须加上构造器
    ResponseCode(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }
}

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

5. 设置静态返回方法,包括成功与失败

    /**
     * 公共静态成功返回方法
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
    }

    /**
     * 公共静态成功返回方法
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(String msg){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg);
    }

    /**
     * 公共静态成功返回方法
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
    }

    /**
     * 公共静态成功返回方法
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    //解决String与data同时传输的问题
    public static <T> ServerResponse<T> createBySuccess(String msg, T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);
    }

    /**
     * 公共静态失败返回方法
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
    }

    /**
     * 公共静态失败返回方法,返回默认失败信息
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(String msg){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), msg);
    }

    /**
     * 公共静态失败返回方法,根据状态码自定义失败信息
     * @param code
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(int code,String msg){
        return new ServerResponse<T>(code, msg);
    }

6. 公共方法序列化忽略

    /**
     * 公共开放方法
     * @return
     */
    //序列化不会显示在JSON里面
    @JsonIgnore
    public boolean isSuccess(){
        return this.status == ResponseCode.SUCCESS.getCode();
    }

7. 返回NULL字段序列化忽略

/**
 * 高复用返回封装对象
 * @param <T>
 */
//JSON序列化忽略是NULL的字段,主要是失败时的data不显示
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServerResponse<T> implements Serializable {

8. 完整代码

package cn.hcnet2006.mmall.mmall.common;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.jsonschema.JsonSerializableSchema;
import org.springframework.web.servlet.function.ServerRequestExtensionsKt;

import java.io.Serializable;

/**
 * 高复用返回封装对象
 * @param <T>
 */
//JSON序列化忽略是NULL的字段,主要是失败时的data不显示
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServerResponse<T> implements Serializable {

    //返回状态
    private int status;
    //返回信息
    private String msg;
    //返回对象
    private T data;

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     */
    private ServerResponse(int status){
        this.status = status;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param msg
     */
    private ServerResponse(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param data
     */
    private ServerResponse(int status, T data) {
        this.status = status;
        this.data = data;
    }

    /**
     * 私有构造器,在调用公共方法时,使用
     * @param status
     * @param msg
     * @param data
     */
    private ServerResponse(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 公共开放方法
     * @return
     */
    //序列化不会显示在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;
    }

    /**
     * 公共静态成功返回方法
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
    }

    /**
     * 公共静态成功返回方法
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(String msg){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg);
    }

    /**
     * 公共静态成功返回方法
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createBySuccess(T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
    }

    /**
     * 公共静态成功返回方法
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    //解决String与data同时传输的问题
    public static <T> ServerResponse<T> createBySuccess(String msg, T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(), msg, data);
    }

    /**
     * 公共静态失败返回方法
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
    }

    /**
     * 公共静态失败返回方法,返回默认失败信息
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(String msg){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(), msg);
    }

    /**
     * 公共静态失败返回方法,根据状态码自定义失败信息
     * @param code
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ServerResponse<T> createByError(int code,String msg){
        return new ServerResponse<T>(code, msg);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值