代码之家  ›  专栏  ›  技术社区  ›  georgij

改装/GSON空字段导致空对象

  •  -1
  • georgij  · 技术社区  · 8 年前

    我有一个json结构,其中的字段可以为空。这样地:

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

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

    ... {"fieldA":"xyz"} ...
    

    反序列化工作正常。这怎么会发生?我已经用Gson单独测试了json,它工作正常(只有fieldA为空),所以问题一定是在改造中?!

    我的改装/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 回复  |  直到 8 年前
        1
  •  0
  •   georgij    8 年前

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