Нулевые значения Retrofit2 / Gson не пропускаются при использовании значения DEFAULT_SERIALIZE_NULLS - PullRequest
3 голосов
/ 28 января 2020

Я сталкиваюсь с какой-то неизвестной ошибкой. Это нарушает мое предположение о нулевой безопасности с Kotlin классом данных и ответами Api.

Скажем, у меня есть класс данных, скажем Person:

 data class Person(val name: String) {
    constructor() : this("")
}

Это создаст объект Человек со значением имени по умолчанию, то есть ненулевым. Ранее, когда я использую модифицированный клиент по умолчанию с GsonConverterFactory.create() (добавлено как фабрика конвертеров). В режиме по умолчанию Gson не сериализует нулевое значение. Но сегодня я узнал, что поле сериализуется в ноль.

Я точно такой же в ReflectiveTypeAdapterFactory https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java#L206

Здесь экземпляр значение имеет ненулевое поле, но после прочтения каждого поля (field.read(in, instance);) оно присваивает нулевое значение. Я ожидаю, что нулевые значения будут пропущены во время сериализации или это десериализация?


Редактировать: Похоже, что десериализация нулей не сериализует проблему нуля. Справка: https://github.com/google/gson/issues/1148

Дайте мне знать, если какие-либо детали отсутствуют или создают путаницу.

1 Ответ

0 голосов
/ 01 февраля 2020

Вы должны сделать параметр имени обнуляемым, изменив тип;

String

до

String?
...