浅皮懔 发表于 2025-6-1 21:13:45

《历史代码分析》2、接口结果封装

​​
本系列《历史代码分析》为工作中遇到具有代表性的代码,已做脱敏处理。今天我们讲一下接口结果封装,制定统一结构的接口返回结果,便于和前端快速对接。
代码如下:
package tech.xueyao.common;


import tech.xueyao.contant.enums.ResponseStatus;
import java.io.Serializable;

public class BaseResponse implements Serializable {

        private Integer code = 10000;
        private String msg = "操作完成";
        private Object data;

        public Integer getCode() {
                return code;
        }

        public void setCode(Integer code) {
                this.code = code;
        }

        public String getMsg() {
                return msg;
        }

        public void setMsg(String msg) {
                this.msg = msg;
        }

        public Object getData() {
                return data;
        }

        public void setData(Object data) {
                this.data = data;
        }

        public void setStatus(ResponseStatus status) {
                this.code = status.code();
                this.msg = status.msg();
        }

        public BaseResponse(Integer code, String msg) {
                this.code = code;
                this.msg = msg;
        }

        public BaseResponse(ResponseStatus status) {
                this.code = status.code();
                this.msg = status.msg();
        }

        public BaseResponse(Integer code, String msg,Object data) {
                this.code = code;
                this.msg = msg;
                this.data=data;
        }

        public BaseResponse() {
        }
}以下是对这段 Java 代码的分析:
1. 代码概述

这段代码定义了一个名为 BaseResponse​ 的基础类,它是一个通用的响应类,用于封装接口返回的结果。
2. 成员变量

private Integer code = 10000;
private String msg = "操作完成";
private Object data;

[*]​code​:表示响应的状态码,默认为 10000​,。
[*]​msg​:表示响应的消息,默认为 "操作完成",错误信息也放在这个变量中。
[*]​data​:表示响应返回的数据,定义为 Object​,可以是任意类型的数据。
3. 构造函数

public BaseResponse(Integer code, String msg) {
    this.code = code;
    this.msg = msg;
}

public BaseResponse(ResponseStatus status) {
    this.code = status.code();
    this.msg = status.msg();
}

public BaseResponse(Integer code, String msg, Object data) {
    this.code = code;
    this.msg = msg;
    this.data = data;
}

public BaseResponse() {
}

[*]提供了多个构造函数,可以创建不同参数的 BaseResponse​ 对象:

[*]​BaseResponse(Integer code, String msg)​:通过状态码和消息创建对象。
[*]​BaseResponse(ResponseStatus status)​:通过 ResponseStatus​ 枚举类创建对象。
[*]​BaseResponse(Integer code, String msg, Object data)​:通过状态码、消息和数据创建对象。
[*]​BaseResponse()​:无参构造函数,使用默认的状态码和消息。

4. 总结

​BaseResponse​ 类是一个通用的响应类,提高了代码的可读性。同时,使用 ResponseStatus​ 枚举类来管理响应状态。
补充

ResponseStatus代码如下:
package tech.xueyao.contant.enums;


public enum ResponseStatus {
        SUCCESS(10000, "成功"),
        INVALID_SIGNATURE(20002, "无效签名"),
        SEND_SMS_MAXIMUM(20003, "短信发送次数达到上限"),
        SEND_SMS_FAIL(20004,"短信发送失败"),
    BAD_REQUEST(40000,"请求有误"),
        BADPARAM(40001, "参数错误"),
        UNAUTHORIZED(40401, "用户未身份认证"),
        NO_PERMISSION(40403, "没有接口权限"),
        NO_PERMISSION_DATE(40404, "没有接口数据权限"),
    NOT_FOUND(40404,"您所访问的资源不存在"),
    Method_NOT_ALLOWED(40405,"方法不被允许"),
        EXCEPTION(50000, "业务处理失败,请稍后再试");

        Integer code;
        String msg;

        ResponseStatus(Integer code, String msg) {
                this.code = code;
                this.msg = msg;
        }

        public Integer code() {
                return this.code;
        }

        public String msg() {
                return this.msg;
        }
}如果返回的结果涉及到分页,我们可以使用下面这个类:
package tech.xueyao.common;

import tech.xueyao.contant.enums.ResponseStatus;

public class PageResponse extends BaseResponse {
    private int pageIndex;//当前页数
    private int pageSize;//分页条数
    private long count;//总条数

    public PagedResponse() {
    }

    public PagedResponse(ResponseStatus responseStatus) {
      super(responseStatus);
    }

    public int getPageIndex() {
      return pageIndex;
    }

    public void setPageIndex(int pageIndex) {
      this.pageIndex = pageIndex;
    }

    public int getPageSize() {
      return pageSize;
    }

    public void setPageSize(int pageSize) {
      this.pageSize = pageSize;
    }

    public long getCount() {
      return count;
    }

    public void setCount(long count) {
      this.count = count;
    }
}‍

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 《历史代码分析》2、接口结果封装