在 JSend 标准中使用 Gson 的问题

Troubles with using Gson with JSend Standard

我的应用程序与一个以 JSend-Standard(http://labs.omniti.com/labs/jsend) 形式提供响应的 rest-interface 进行通信。为了发送请求并处理响应,我正在使用改造和 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 中,我使用泛型来区分不同的 "data" 可能性:

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

这就是麻烦的开始。 如果我得到状态 "success" 很好,因为我完全知道会发生什么,并且我可以为 MyPOJO 定义通用类型(它只是另一个 POJO 或布尔值或其他)。

但是状态 "fail" 我真的不能提前告诉 "data" 里面是什么。它主要只是出错的键值列表,但由于我不知道键,我无法正确定义 POJO,我是 return MyPOJO 的一个实例,其所有字段都设置为 null .

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

由于响应 JSON 中 "data" 的值可以为空,或者一个对象,您最好的选择可能是只使用通用类型的 Map

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