如何在Android的Retrofit中处理可选的JSON字段?

joe*_*elj 8 java android json gson retrofit

我正在为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"
   }
}
Run Code Online (Sandbox Code Playgroud)

当某些字段没有任何数据时,替代响应

{
  "status":"SUCCESS",
  "class-1":{
     "class.enddate":"Jan/10/2016",
     "class.startdate":"Jan/10/2015",
     "class.title":"Physics 1"
   }
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

如何以处理不存在的可选字段的方式创建POJO类?当字段丢失时,整个MyClassInformation对象变为NULL,请帮忙.

joe*_*elj 3

我设法通过反复试验解决了这个问题,设法通过删除 @Expose 注释并更改 Gson 构造函数来使其工作...现在,如果字段丢失并且仅显示丢失的字段,则整个对象不会被清空或排除为空。

这就是我改变的,从

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Run Code Online (Sandbox Code Playgroud)

Gson gson = new GsonBuilder().create();
Run Code Online (Sandbox Code Playgroud)

希望它对任何正在寻找类似答案的人有所帮助。