Retrofit / GSON null字段导致空对象

时间:2016-10-27 11:53:08

标签: json retrofit2

我有一个json结构,其字段可以变为null。像这样:

{ "objectA":{"fieldA":null}, "objectB":{"fieldB1":123,"fieldB2":"abcdef"} }

问题在于,在这种情况下,表示结构的整个对象也变为空。如果该字段不像

那样是空的
... {"fieldA":"xyz"} ...

反序列化工作正常。怎么会发生这种情况?我已经用Gson单独测试了我的json并且它工作正常(只有fieldA为null)所以问题必须在改造中?!

我的改造/ gson依赖是:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

响应结构如下所示:

public class ObjectResponse extends BaseResponse {

 @SerializedName("objectA")
 private ObjectA objectA;

 public ObjectA getObjectA() {
    return objectA;
 }
}

public class ObjectA {

 @SerializedName("fieldA")
 private String fieldA;

 public String getFieldA() {
    return fieldA;
 }
}

public class BaseResponse {

 @SerializedName("objectB")
 private ObjectB objectB;

 public ObjectB get ObjectB() {
    return objectB;
 }
}

public class ObjectB {

 @SerializedName("fieldB1")
 private int fieldB1;
 @SerializedName("fieldB2")
 private String fieldB2;

 public int getFieldB1() {
   return fieldB1;
 }

 public String getFieldB2() {
   return fieldB2;
 }
}

1 个答案:

答案 0 :(得分:0)

事实证明,原因不是空字段,但它是一个提示。 (在我的情况下)字段为空的原因是服务器端存在逻辑拒绝,这导致HTTP响应代码也设置为错误值。但是,如果响应代码超出[200..300],则Retrofit不会执行从json到java对象的转换。