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