我正在为Android应用程序开发JSON解析器。当我向服务器调用数据时,有一些可选字段,我如何使用GSON转换器在Retrofit中处理这个?
正常回复
{
"status":"SUCCESS",
"class-1":{
"class.enddate":"Jan/10/2016",
"class.startdate":"Jan/10/2015",
"class.title":"Physics 1",
"class.short.description":"Physics 1",
"class.description":"This is a Physics Class"
}
}
备用响应,当某些字段没有任何数据时
{
"status":"SUCCESS",
"class-1":{
"class.enddate":"Jan/10/2016",
"class.startdate":"Jan/10/2015",
"class.title":"Physics 1"
}
}
POJO课程
public class MyClass {
@Expose @SerializedName("status")
public String status;
@Expose @SerializedName("class-1")
public MyClassInformation myClassInformation;
}
public class MyClassInformation {
@Expose @SerializedName("class.title")
public String classTitle;
@Expose @SerializedName("class.short.description")
public String classShortDescription;
@Expose @SerializedName("class.description")
public String classDescription;
@Expose @SerializedName("class.startdate")
public String startDate;
@Expose @SerializedName("class.enddate")
public String endDate;
}
如何以处理不存在的可选字段的方式创建POJO类? 当字段丢失时,整个MyClassInformation对象变为NULL,请帮助。
答案 0 :(得分:2)
我设法通过反复试验来解决这个问题,设法通过删除@Expose注释并更改Gson构造函数来使其工作......现在,如果缺少字段并且只丢失了整个对象,则整个对象不会被取消或排除字段显示为null。
这是我改变的, 从
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
要
Gson gson = new GsonBuilder().create();
希望能帮助任何正在寻找类似答案的人。
答案 1 :(得分:0)
几年前我一直在努力。
可能对此没有好的答案。至少不是我所知道的。
考虑了3个选项:
null
,以防在没有接收到类型有意义的值的情况下(例如,它对于基本类型并不总是有意义的)。在这里,您将更多的工作放在那些通过JSON但是您的Java代码更简单,但不太灵活的人身上。每个选项都有优点和缺点,我最终得到了选项3。
希望它有所帮助,祝你好运!