我的应用程序与休息接口进行通信,该接口以JSend-Standard(http://labs.omniti.com/labs/jsend)的形式提供响应。为了发送请求并使用我正在使用retrofit和gson的响应。
所以我发送了一个请求,api提供了一个看起来像这样的json:
{
status : "success",
data : // some json object or just a single value
}
{
status : "error",
message : "Unable to communicate with database"
code: 5
}
在我的POJO中,使用通用类型来区分不同的“数据”可能性:
public class MyPOJO<Data>
{
private String status;
private Data data;
private int code;
private String message;
}
到目前为止一切正常! 但JSend也可以这种形式提供回复:
{
status : "fail",
data : {
title : "A title is required",
someValue: "Also this value is required "
}
}
这就是麻烦开始的地方。 如果我获得状态“成功”它的罚款,因为我完全知道会发生什么,我可以为MyPOJO定义通用类型(它只是另一个POJO或布尔或其他)。
但是由于状态“失败”,我无法提前告诉“数据”内部是什么。它主要只是一个错误的键值列表,但由于我不知道键,我无法正确定义POJO,我将返回一个MyPOJO实例,其所有字段都设置为null。
有没有人知道如何解决或解决此问题。 提前致谢! 亲切的问候
答案 0 :(得分:0)
由于&#34;数据&#34;的价值在响应中,JSON可以为null,或者一个对象,你最好的选择就是使用泛型类型的Map&lt; String,Object&gt;
否则,由于数据可能表示任意错误或您预期的响应对象,因此您必须考虑可能从任何端点返回的所有可能的错误键/值组合。