2016-10-27 4 views
-1

У меня есть структура json с полями, которые могут стать нулевыми. Например:Дополнение к обновлению/GSON null приводит к нулевому объекту

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

Проблема в том, что в этом случае весь объект, представляющий структуру, также становится нулевым. Хотя, если подача не является нулевой, как

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

десериализация отлично работает. Как это может произойти? Я тестировал свой json только с Gson, и он работает правильно (только 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

Это странно ... Не могли бы вы изложить определение своих моделей и какую версию модификации вы используете? – Fred

ответ

0

Оказывается, что причина не нулевое поле, однако это намек. Причина (в моем случае), что поля были пустыми, состояла в том, что на стороне сервера был логический отказ, который также приводил к тому, что код ответа HTTP также указывал на значение ошибки. Однако Retrofit не выполняет преобразование из json в объект java, если код ответа находится вне [200..300).

Смежные вопросы