Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 135

Преобразовать ответ с JSON объектом в DTO

27.06.2017, 19:25. Показов 9632. Ответов 22

Студворк — интернет-сервис помощи студентам
Я использую API которое возвращает JSON объект такого вида:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"response": {
    "GeoObjectCollection": {
        "featureMember": [
            {
                "GeoObject": {
                    "Point": {
                        "pos": "37.611347 55.760241"
                    }
                }
            },
            {
                "GeoObject": {
                    "Point": {
                        "pos": "37.593965 55.771575"
                    }
                }
            }
        ]
    }
}
}
Я хочу конвертировать данный объект в DTO model в моем Spring Boot приложении. Как это можно сделать? Во всех, примерах, которые я находил, рассматривался самый простой объект вида, как, например, здесь:
JSON
1
2
3
4
5
6
7
{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}
И там создали два класса DTO и на этом все. Как действовать здесь, не понятно.

Нужно создавать классы response, GeoObjectCollection, GeoObject и т.д. или есть что-то проще и правильней?

Добавлено через 1 час 51 минуту
Вообщем сделал класс:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package ru.geo.converter.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
 
@Data
public class GeographicCoordinatesDto {
   @JsonProperty("response")
   private ResponseResult responseResult;
}
 
@Data
class ResponseResult {
   @JsonProperty("GeoObjectCollection")
   private GeoObjectCollection geoObjectCollection;
}
 
@Data
class GeoObjectCollection {
  @JsonProperty("featureMember")
  private List<FeatureMember> featureMember;
}
 
@Data
class FeatureMember {
   @JsonProperty("GeoObject")
   private GeoObject geoObject;
}
 
@Data
class GeoObject {
   @JsonProperty("Point")
   private PointItem pointItem;
}
 
@Data class PointItem {
   @JsonProperty("pos")
   private String geoCoordinates;
}
Затем пытаюсь маппить:
Java
1
2
GeographicCoordinatesDto geographicCoordinatesDto = mapper.readValue(jsonInString, GeographicCoordinatesDto.class);
System.out.println(geographicCoordinatesDto.getResponseResult());
В итоге возвращается следующее:
Java
1
ResponseResult(geoObjectCollection=GeoObjectCollection(featureMember=[FeatureMember(geoObject=GeoObject(pointItem=PointItem(geoCoordinates=37.611347 55.760241))), FeatureMember(geoObject=GeoObject(pointItem=PointItem(geoCoordinates=37.593965 55.771575)))]))
Но, стоит добавить в JSON ряд других полей, все падает. Понятно, что данный JSON содержит множество других данных, которые мне абсолютно не нужны при парсинге, не описывать же каждый из них в классах. Мне просто нужно забрать координаты.

Неужели ни у кого нет мыслей и с такой задачей не сталкивался?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2017, 19:25
Ответы с готовыми решениями:

Динамически конвертировать JSON в нужный DTO класс
С помощью get запроса к api (https://api.tfl.gov.uk/Road?app_id=fdff28a0&amp;app_key=5b002afe79e22fea5ded1abf9039f2de) получаю json данные. И...

Как отправить json post запросом и принят json в ответ?
Вообщем начал постигать новую windows phone... Решил сразу попытаться наладить общение с сервером. Но вот что то не очень выходит....

Распарсить с помощью Json.Net приходящий ответ в виде JSON
Нужна помощь с json {&quot;success&quot;:true, &quot;rgInventory&quot;:{ &quot;1025429056&quot;:{ &quot;id&quot;:&quot;1025429056&quot;, &quot;classid&quot;:&quot;310779217&quot;,...

22
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
30.06.2017, 15:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от LeX Посмотреть сообщение
пруф?
там выше кусочек кода.
Цитата Сообщение от Neo-X2006 Посмотреть сообщение
А как это преобразовать в DTO
получаешь pos, делаешь split по пробелу, на выходе будет массив из двух строк, для каждой делаешь Double.parseDouble, получаешь два дабла, делаешь класс Point с полями x и y типа double, объявляешь конструкторб который принимает два параметра...
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
04.07.2017, 07:13
Цитата Сообщение от xoraxax Посмотреть сообщение
там выше кусочек кода.
это не автоматический маппинг, удобнее же описать один раз и все автоматизировать, не так ли?)

Цитата Сообщение от Neo-X2006 Посмотреть сообщение
Если так, то валится с ошибкой:
ты Point или pos получаешь? будет работать только с первым
0
 Аватар для we2seek
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
05.07.2017, 04:05
Так пойдет?

Pos.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Pos {
    private String x;
    private String y;
 
    public Pos() {
    }
 
    public Pos(String posXAndY) {
        String[] split = posXAndY.split(" ");
        if (split.length == 2) {
            this.x = split[0];
            this.y = split[1];
        }
    }
 
    @Override
    public String toString() {
        return String.format("Pos{x=%s, y=%s}", x, y);
    }
}
App.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class App {
    private static final String JSON = "{\n" +
            "  "response": {\n" +
            "    "GeoObjectCollection": {\n" +
            "      "featureMember": [\n" +
            "        {\n" +
            "          "GeoObject": {\n" +
            "            "Point": {\n" +
            "              "pos": "37.611347 55.760241"\n" +
            "            }\n" +
            "          }\n" +
            "        },\n" +
            "        {\n" +
            "          "GeoObject": {\n" +
            "            "Point": {\n" +
            "              "pos": "37.593965 55.771575"\n" +
            "            }\n" +
            "          }\n" +
            "        }\n" +
            "      ]\n" +
            "    }\n" +
            "  }\n" +
            "}";
 
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(JSON);
 
        Iterator<JsonNode> elements = root.path("response").path("GeoObjectCollection").path("featureMember").elements();
        while (elements.hasNext()) {
            JsonNode pos = elements.next().path("GeoObject").path("Point").path("pos");
            Pos pos1 = mapper.treeToValue(pos, Pos.class);
            System.out.println(pos1);
        }
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2017, 04:05

Flask и SQLAlchemy и JSON. Не получается преобразовать результат запроса в json
У меня есть БД построенная из этих моделей с помощью миграций: # Class Class stores info about dish categories class...

ответ json
отправляю по аяксу данные $.ajax({ url:&quot;notis.php&quot;, data:&quot;&quot;, dataType: &quot;json&quot;, ...

PHP - Json ответ
Привет всем! подключаю API Яндекс кассы https://kassa.yandex.ru/docs/guides/#shag-1-sozdajte-platezh Создаю платеж (шаг 1 );...

JSON ответ от сервера
Люди добрые!!! Выручайте бедолагу. Который день ломаю голову (*от не знаний). Объясню ситуацию - есть приложение (скопипастил скрипты с...

Распарсить JSON ответ
Всем привет. Суть дела: пишу плагин для хрома. На сайте по нажатию на кнопку серверу отправляется POST-запрос в формате ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru