Retrofit Dynami c JSON ответ - PullRequest
       74

Retrofit Dynami c JSON ответ

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

Я новичок в JSON обработке с модернизацией, но я столкнулся с проблемой. Мы создаем прототип интеллектуального помощника для чата с Dialogflow.

Мой Android Клиент отправляет запрос POST в Google Dialogflow, который вызывает сторонние API и отправляет ответ обратно.

Однако этот ответ зависит от типа намерения, обнаруженного Dialogflow. Это может быть почти все, от музыки c до информации о погоде и т.д. c. Таким образом, параметры (для визуализации) будут совершенно другими, и я заранее не знаю тип ответа.

Я предварительно обработал ответ из Dialogflow в своей собственной облачной функции и отправил обратно, содержащий только необходимые поля для клиента.

Например:

«Какая сегодня погода в Брюсселе?»

Ответ:

{
    "sessionId": "123456789",
    "keepAlive": true,
    "intentId": 100,
    "intentName": "Weer",
    "text": "Het weer in Hanoi is helder met een temperatuur van 23.2 graden.",
    "Parameters": {
        "text": {
            "stringValue": "helder",
            "kind": "stringValue"
        },
        "city": {
            "stringValue": "Hanoi",
            "kind": "stringValue"
        },
        "temp": {
            "numberValue": 23.2,
            "kind": "numberValue"
        },
        "intentId": {
            "numberValue": 100,
            "kind": "numberValue"
        }
    }
}

Вы видите Параметры ответа зависят от типа намерения (id). может быть много или ноль параметров в зависимости от цели.

Как я могу сделать Pojo для каждого типа ответа, а не только для погоды?

Или я могу сделать случай переключения на основе intentId или что-то?

1 Ответ

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

Вы можете использовать дженерики, чем

public class Response<T> {
       private String responseId;
       private String sessionId;
       private boolean keepAlive;
       private float intentId;
       private String intentName;
       private String text;
       private String Audio;
       private T Parameters;
        }

, и когда вы хотите создать объект, вы можете

new Response<YourClass>();

Ваш класс будет классом согласно вашему намеренному идентификатору

...