Модернизация — возможно ли ожидать в ответ либо строку, либо объект

#json #android-studio #retrofit2

#json #android-studio #retrofit2

Вопрос:

Я должен запросить API, который по умолчанию возвращает объект, и есть раздел «подробнее», который может быть объектом или строкой, зависит от некоторых отправленных данных. Он предназначен для создания подобного, не созданного мной, конечно.

 {
    ...
    "list": {
        ...
        "more": {
            "header": {
                "a": "..."
            },
            "request": {
                ...
            }
        }
    }
}
 

Выше приведен типичный ответ, который я получаю от API, этот список more является объектом. Но иногда он возвращался, как показано ниже, хотя, конечно, это привело бы меня к ошибке.

 {
    ...
    "list": {
        ...
        "more": "no data available"
            
    }
}
 

Мне просто любопытно, возможно ли справиться с этим, поскольку модернизация немедленно выдает ошибку, если ответ не совсем такой, как POJO? или я могу использовать любой, чтобы сделать это возможным? поскольку, если я изменю POJO на String, это приведет меня к ошибке, если ответ будет объектом.

Давайте не будем забывать о том, как я запрашиваю ответ. Я мог бы это предоставить, но нужно ли это для этого вопроса? если это так, то спросите меня, я сделаю.

Изменить POJO на любой невозможно, поскольку Parcelize не поддерживает этот тип.

Редактировать

Поскольку возникает вопрос, какую ошибку я получу, я сделаю ее доступной для чтения здесь.

Если бы я установил его как строку, было бы нормально, если бы ответ был строкой, но если это объект, он вернется.

java.lang.Исключение IllegalStateException: Исключена строка, но она была BEGIN_OBJECT в строке 1 столбца 4363 $.list.more

и это было бы иначе, если бы я установил для него значение object, но он возвращал String

java.lang.Исключение IllegalStateException: исключен объект, но он был строкой в строке 1 столбца 4363 $.list.more

Комментарии:

1. какую ошибку вы получаете? С ответами api все в порядке, оба в порядке. Один pojo может обрабатывать оба ответа.

2. отредактированный вопрос для читаемой версии

3. вы знаете ошибку, она связана с анализом ответа. Вам необходимо обработать синтаксический анализ. И вы всегда получаете строку в ответ. Внесите изменения в свой pojo.

4. ах, вы правы.