Выбор ответа Middle Сеть: Retrofit и OkHttp обновлено

Новое поле в JSON и kotlinx.serialization

Вопрос

Сервер добавил в ответ новое поле. Приложение с Json {} без настроек и kotlinx.serialization стало падать. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Неизвестные ключи по умолчанию дают ошибку; нужен ignoreUnknownKeys = true. Строгий режим по умолчанию бросает SerializationException на неизвестный ключ.

Варианты ответа

  1. kotlinx.serialization не поддерживает вложенные объекты без аннотации @Polymorphic
  2. Нужно пометить класс @Keep, иначе R8 вырежет новое поле из модели
  3. Сервер должен прислать заголовок версии, и парсер выберет нужную схему
  4. Неизвестные ключи по умолчанию дают ошибку; нужен ignoreUnknownKeys = trueправильный ответ

Разбор

Строгий режим по умолчанию бросает SerializationException на неизвестный ключ. Для клиента, у которого старые версии живут годами, это опасно: любое расширение API ломает установленные приложения. ignoreUnknownKeys = true пропускает лишние поля. Вложенные объекты поддерживаются, @Keep относится к R8, заголовки не помогут.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.