我正在使用retrofit,我需要在请求不同的api时传递不同的请求数据类。父类会有所不同,但子类在运行时可能会有所不同。
以下是不同的请求示例:
第一个示例
{ “标题”:{ “版本”:“字符串”, "区域设置":"字符串", }, “ body ”:{ “员工”:{ “id”:“字符串”, “密码”:“字符串” } } }
第二个示例
{ “标题”:{ “版本”:“字符串”, "区域设置":"字符串", }, “ body ”:{
“ worker ”:{ “名称”:“字符串”, “姓氏”:“字符串” } } }
我创建了不同的 header 、正文和用户类,并试图弄清楚如何创建动态请求。
最佳答案
查看下面的示例,了解如何动态实现此目的:
首先,我们创建包含 version
和 locale
键的 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/