我有两个具有相同外部模型的API,因此为外部模型创建了一个模型类(ResponseModel),为结果键创建了一个名为ResultModel的类,因此我可以编写所有可能的响应可能会出现在结果键上
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseModel {
@JsonProperty("code")
private Integer code;
@JsonProperty("message")
private String message;
@JsonProperty("result")
private List<ResultModel> result;
}
在这里,我在ResultModel中添加了可能的响应 结果键将显示国家列表或州列表
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultModel {
private Country country;
private State state;
}
CountryList API 1结果
{
"code" :102
"message" : "message string"
"result" : [
{ "id" : 1, "name": "hello" },
{ "id" : 2, "name": "world" }]
}
StateList API 2结果
{
"code" :101
"message" : "message test"
"result" : [
{ "id" : 1, "name": "hello", "code" :1001 },
{ "id" : 2, "name": "world", "code" :1002 }]
}
我遵循此结构来重用外部模型。但它不起作用
无论如何,都可以重用ResponseModel而不为国家和州创建每个类。
答案 0 :(得分:0)
实现的问题是,您正在以错误的方式构建对象,而当前类正在等待json,如下所示:
{
"code" :102
"message" : "message string"
"result" : [
{
"country" : { "id" : 1, "name": "hello" },
"state" : { "id" : 2, "name": "world", "code" :1002 }
}
]
}
一个更好的选择是使用这样的泛型:
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseModel<T> {
@JsonProperty("code")
private Integer code;
@JsonProperty("message")
private String message;
@JsonProperty("result")
private List<T> result;
}
然后您可以在实现中指定您所观察的对象的类型:
ResponseModel<Country>
ResponseModel<State>
并且不再需要ResultModel类。
答案 1 :(得分:0)
您需要下面的类架构。
data class WebResponse<T>(
val code: Int,
val message: String,
val result: List<T>
) {}
并致电您的服务
@GET("/countryList")
fun getCountries(): Call<WebResponse<CountryEntity>>
@GET("/stateList")
fun getStateList(): Call<WebResponse<StateEntitiy>>