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

标签 java android json request retrofit

我正在使用retrofit,我需要在请求不同的api时传递不同的请求数据类。父类会有所不同,但子类在运行时可能会有所不同。

以下是不同的请求示例:

  • 第一个示例

    { “标题”:{ “版本”:“字符串”, "区域设置":"字符串", }, “ body ”:{ “员工”:{ “id”:“字符串”, “密码”:“字符串” } } }

  • 第二个示例

    { “标题”:{ “版本”:“字符串”, "区域设置":"字符串", }, “ body ”:{
    “ worker ”:{ “名称”:“字符串”, “姓氏”:“字符串” } } }

我创建了不同的 header 、正文和用户类,并试图弄清楚如何创建动态请求。

最佳答案

查看下面的示例,了解如何动态实现此目的:

首先,我们创建包含 versionlocale 键的 RequestHeader 类(我使用 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”参数的通用基类,如下所示:

RequestContainer.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如下所示:

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

关于java - 创建具有不同请求类型的请求数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59135057/

相关文章:

java - 引用字符串数组中的前一个字符串

java - 将单页应用程序与 Ping Federate 集成

java - 如何使用 Firebase 向管理员显示所有登录用户数据?

javascript - 将 JSON 字符串发送到 cherrypy

java - 理解类成员行为多态性

java - Android Studio 无法识别 AndroidManifest 中的使用权限

android - 如何在android中的scrollView中添加gridView

JSON.stringify 不会对嵌套数组进行字符串化

java - 如何在 Java 中读取 JSON 文件

java - 在 Lucene 中处理带有否定术语的文档