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

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

20250302193253218998.png

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

代码如下:

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;
    }
}

原文地址:https://www.cnblogs.com/loveyous/p/18746653