我的应用程序与休息接口(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/