使用Gson和JSend Standard的麻烦

时间:2015-08-12 14:43:47

标签: java android gson retrofit

我的应用程序与休息接口进行通信,该接口以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。

有没有人知道如何解决或解决此问题。 提前致谢! 亲切的问候

1 个答案:

答案 0 :(得分:0)

由于&#34;数据&#34;的价值在响应中,JSON可以为null,或者一个对象,你最好的选择就是使用泛型类型的Map&lt; String,Object&gt;

否则,由于数据可能表示任意错误或您预期的响应对象,因此您必须考虑可能从任何端点返回的所有可能的错误键/值组合。