Я создаю приложение, которое принимает координаты пользователя, координаты в API погоды отправляются для тела запроса JSON, затем тело ответа JSON сопоставляется с несколькими POJO.

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

Пример тела ответа:

{
    "location": {
        "name": "Lake Tamarisk",
        "region": "California",
        "country": "United States of America",
        "lat": 33.81,
        "lon": -115.34,
        "tz_id": "America/Los_Angeles",
        "localtime_epoch": 1629239816,
        "localtime": "2021-08-17 15:36"
    },
    "current": {
        "last_updated_epoch": 1629239400,
        "last_updated": "2021-08-17 15:30",
        "temp_c": 36.4,
        "temp_f": 97.5,
        "is_day": 1,
        "condition": {
            "text": "Partly cloudy",
            "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png",
            "code": 1003
        },
        "wind_mph": 12.1,
        "wind_kph": 19.4,
        "wind_degree": 176,
        "wind_dir": "S",
        "pressure_mb": 1006.0,
        "pressure_in": 29.72,
        "precip_mm": 0.0,
        "precip_in": 0.0,
        "humidity": 36,
        "cloud": 6,
        "feelslike_c": 39.3,
        "feelslike_f": 102.7,
        "vis_km": 10.0,
        "vis_miles": 6.0,
        "uv": 9.0,
        "gust_mph": 13.9,
        "gust_kph": 22.3
    }
}

POJO Классы:

Location, Condition, Current
0
SkepticalTiger 18 Авг 2021 в 01:38

2 ответа

Лучший ответ

Пусть иерархия классов отображает структуру JSON. Классов должно быть не менее 4. Корневой класс содержит данные JSON и 3 упомянутых вами класса.


class Response {
    Location location;
    Current current;
}

class Current {
    String lastUpdatedEpoch;
    ......
    Condition condition;
}

class Condition {
    String text;
    .......
}

class Location {
    String name;
    ......
}

И, наконец, используйте некоторую стратегию, например annotaion @JsonNaming , чтобы преобразовать случай верблюда в футляр змеи.

0
japhy 18 Авг 2021 в 08:10

Создайте корневой класс с другими классами внутри как поля.

class Root {
    List<Location> location;
    List<Current> current;
}

class Current {
    List<Condition> condition;
}

Ваш сопоставитель объектов сопоставит json с классом с именем Root

0
Mouamle Hasan 17 Авг 2021 в 22:42