Задать вопрос

Retrofit: как быть, когда структура ответа сервера меняется?

Привет!

Разбираюсь с API, подробного описания к которому нет.
К примеру, GET-запрос к серверу: _https:_//server.net/getdetails/?ctn=4950000001
Если всё ОК, вернётся ответ с кодом 200:
  • если номер не переводился между операторами:

{"code": "495", "num": "0000001", "full_num": "4950000001", "operator": "МГТС", "region": "г. Москва"}

  • если была смена оператора с сохранением номера:

{"code": "900", "num": "5555555", "full_num": "9005555555", "operator": "ВымпелКом", "old_operator": "СИМ ТЕЛЕКОМ", "region": "г. Москва * Московская область"}
, добавляется параметр old_operator.

Если что-то не так с входными данными, вернётся ответ с кодом 404.
В теле ответа будет:
  • это:
{"info": "Неверный формат номера: 49500000", "example": ["+74959898533", "74959898533", "84959898533", "4959898533"]}

  • это:
{"info": "Номер не найден. Проверьте код города: 000", "example": ["3XX", "4XX", "8XX", "9XX"]}

  • или это:
{"info": "Неверный формат запроса, ctn обязательный параметр", "example": "https://server.net/getdetails/?ctn=+74959898533"}


Как обрабатывать ответ сервера с помощью Retrofit? Возможно ли это?
Насколько я понял, он (Retrofit) создаёт из ответа объект, с которым потом я могу работать.
Как быть в случае, если меняется и сам ответ сервера (код, содержимое), так и формат правильного JSON-ответа?
  • Вопрос задан
  • 310 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Да с этим можно жить. Сам Ретрофит не конвертит ответ в json, для этого ему проставляется addConverterFactory(factory). Нужно написать кастомный адаптер для той библиотеки конвертации json, которую ты используешь(примеры про Gson). Из ответа придется понимать, что именно пришло и возвращать соответствующий объект.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы