有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建具有不同请求类型的请求数据类

我正在使用改型,我需要在不同api的请求中传递不同的请求数据类。父类将不同,但子类在运行时可能不同

以下是不同的请求示例:

  • 第一个样本

    { “标题”:{ “版本”:“字符串”, “语言环境”:“字符串”, }, “正文”:{ “雇员”: “id”:“string”, “密码”:“字符串” } } }

  • 第二个样本

    { “标题”:{ “版本”:“字符串”, “语言环境”:“字符串”, }, “正文”:{
    “工人”:{ “名称”:“字符串”, “姓氏”:“字符串” } } }

我创建了不同的header、body和user类,并试图找出如何创建动态请求


共 (1) 个答案

  1. # 1 楼答案

    查看下面的示例,了解如何动态实现这一点:

    首先,我们创建RequestHeader类,其中包含version&locale键(我用Gson序列化变量)

    RequestHeader。java

    import com.google.gson.annotations.SerializedName;
    
    public class RequestHeader {
        @SerializedName("version")
        private String version;
        @SerializedName("locale")
        private String locale;
    
        public String getVersion() {
            return version;
        }
    
        public void setVersion(String version) {
            this.version = version;
        }
    
        public String getLocale() {
            return locale;
        }
    
        public void setLocale(String locale) {
            this.locale = locale;
        }
    }
    

    我们有一个可以是任何东西的动态子类,因此我们创建了包含“body”参数的通用基类,如下所示:

    请求容器。java

    import com.google.gson.annotations.SerializedName;
    
    public class RequestContainer<T> {
        @SerializedName("header")
        private RequestHeader requestHeader;
        @SerializedName("body")
        private T body;
    
        public RequestHeader getRequestHeader() {
            return requestHeader;
        }
    
        public void setRequestHeader(RequestHeader requestHeader) {
            this.requestHeader = requestHeader;
        }
    
        public T getBody() {
            return body;
        }
    
        public void setBody(T body) {
            this.body = body;
        }
    }
    

    所以,现在我们可以在运行时获取任何动态的子对象

    提供API端点类似于(即员工):

    @POST("someapi")
    public Call<SomeResponseClass> saveEmployee(@Body RequestContainer<EmployeeDto>);
    

    其中EmployeeDto希望如下:

    员工需要。java

    import com.google.gson.annotations.SerializedName;
    
    public class EmployeeDto {
        @SerializedName("employee")
        private Employee employee;
    
        public Employee getEmployee() {
            return employee;
        }
    
        public void setEmployee(Employee employee) {
            this.employee = employee;
        }
    
        public class Employee {
            @SerializedName("id")
            private String id;
            @SerializedName("password")
            private String password;
    
            public String getId() {
                return id;
            }
    
            public void setId(String id) {
                this.id = id;
            }
    
            public String getPassword() {
                return password;
            }
    
            public void setPassword(String password) {
                this.password = password;
            }
        }
    }