java - 将 Gson 与 JSend Standard 结合使用时遇到的问题

标签 java android gson retrofit

我的应用程序与休息接口(interface)通信,该接口(interface)以 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 或 boolean 值或其他)。

但是状态为“失败”时,我无法真正提前知道“数据”中的内容。它主要只是错误的键值列表,但由于我不知道键,所以我无法正确定义 POJO,并且我返回一个 MyPOJO 的实例,其所有字段都设置为 null。

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

最佳答案

由于响应 JSON 中的“数据”值可以为 null,或者是一个对象,因此您最好的选择可能是仅使用通用类型的 Map

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

关于java - 将 Gson 与 JSend Standard 结合使用时遇到的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31968478/

相关文章:

java - 从 Haxe 调用 Java 函数

android - 首选项中的单选按钮选项 - android

java - 如何在 Java 文件中运行 Kotlin 库(通过 JitPack 分发)?

java - 当字段名称未知时解析 json 对象

android - 错误:找不到:com.google.code.gson:gson:2.3

JavaScript 无法从 Java 解析使用 Gson 序列化的字符串

java - swing:关于调整 JFrame 大小和条件滚动

java - 使用正则匹配a^xb^x,其中x为a,b出现的次数

java - 作为内部类的事件适配器

android - 等待 5 秒