Я использую gson в проекте Android и получил проблему.Я хочу установить значение по умолчанию для объекта списка, если Api даст мне нулевое значение для этого поля.Я больше не изменяю это поле, поэтому не хочу каждый раз проверять его на нулевое значение
Так что, если быть более подробным
У меня есть, например, этот класс
class Model {
@Expose private int test = 1;
@Expose private int primitive = 1;
@Expose private List<String> strings = new ArrayList<>();
}
и json из Api
{
"test" : 12
}
, поэтому я ожидаю, что gson сгенерирует объект с полями:
Model obj = gson.fromJson(json, Model.class);
// obj.test == 12;
// obj.primitive = 1;
// obj.strings = [] empty string array
, но gson переопределит не примитивные поля
Model obj = gson.fromJson(json, Model.class);
// obj.test == 12;
// obj.primitive = 1; // int is primitive and gson use default value
// obj.strings = null // here error
Я проверил исходный код и обнаружил, что ReflectiveTypeAdapterFactory.BoundField использует значение по умолчанию только для примитивов.
@Override void read(JsonReader reader, Object value) throws IOException, IllegalAccessException {
Object fieldValue = typeAdapter.read(reader);
if (fieldValue != null || !isPrimitive) {
field.set(value, fieldValue);
}
}
, поэтому я спрашиваю, знает ли кто-нибудь, как решить эту проблему, и заставить gson возвращать ненулевые значения дляне примитивные поля