Выбор ответа Middle Сеть: Retrofit и OkHttp обновлено
Новое поле в JSON и kotlinx.serialization
Вопрос
Сервер добавил в ответ новое поле. Приложение с Json {} без настроек и kotlinx.serialization стало падать. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Неизвестные ключи по умолчанию дают ошибку; нужен ignoreUnknownKeys = true. Строгий режим по умолчанию бросает SerializationException на неизвестный ключ.
Варианты ответа
- kotlinx.serialization не поддерживает вложенные объекты без аннотации
@Polymorphic - Нужно пометить класс
@Keep, иначе R8 вырежет новое поле из модели - Сервер должен прислать заголовок версии, и парсер выберет нужную схему
- Неизвестные ключи по умолчанию дают ошибку; нужен
ignoreUnknownKeys = trueправильный ответ
Разбор
Строгий режим по умолчанию бросает SerializationException на неизвестный ключ. Для клиента, у которого старые версии живут годами, это опасно: любое расширение API ломает установленные приложения. ignoreUnknownKeys = true пропускает лишние поля. Вложенные объекты поддерживаются, @Keep относится к R8, заголовки не помогут.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.