API возвращает разные типы объектов для разных сценариев - PullRequest
0 голосов
/ 11 февраля 2020

Я использую API в Java Web App. API возвращает JSON и имеет поле «Переводы» для каждого Вопроса. Когда переводы доступны, он возвращается как тип вложенного объекта. Если переводы недоступны, он возвращается как пустой массив. Я использую десериализатор Джексона для десериализации результата.

 {
     "result" :{"QI": {
            "Question": "Select City",
            "Option": {
                "1": {
                    "Display": "Washington DC"
                },
                "2": {
                    "Display": "New Delhi"
                },
                "3": {
                    "Display": "London"
                }
            },
            "Transalations": []
        },
        "Q2": {
            "Question": "Select Country",
            "Option": {
                "1": {
                    "Display": "India"
                },
                "2": {
                    "Display": "USA"
                },
                "3": {
                    "Display": "UK"
                }
            },
            "Transalations": {
                "ZH-T": {
                    "Question": "選擇國家",
                    "Option": {
                        "1": {
                            "Display": "印度"
                        },
                        "2": {
                            "Display": "美國"
                        },
                        "3": {
                            "Display": "英國"
                        }
                    }
                },
                "ES-ES": {
                    "Question": "Seleccionar país",
                    "Option": {
                        "1": {
                            "Display": "India"
                        },
                        "2": {
                            "Display": "Estados Unidos"
                        },
                        "3": {
                            "Display": "Reino Unido"
                        }
                    }
                }
            }
        }
     }
 }

Я сопоставляю поле результата в классе ответа, используя объект карты:

 Map<String, Object> result 

Когда я пытаюсь получить перевод после получения «Q1» из результата с использованием

Map<String,Object> translations = (Map<String,Object>)questionDetails.get("Transalations");

Я получаю ClassCastException, утверждая, что ArrayList не может быть преобразован в LinkedHashMap всякий раз, когда я сталкиваюсь с вопросом без переводов.

«Переводы»: []

Как мне сопоставить эти два разных объекта. Мне известно о instanceOf , но я не хочу его использовать.

1 Ответ

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

Использование 'instanceOf' - единственный вариант сделать это в java. Джексон использует тот же самый подход для разрешения чисел, объектов и т. Д. c.

Также вы можете указать класс для вашего ответа и создать собственный десериализатор, который в любом случае должен использовать 'instanceOf'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...