Как проанализировать ответ Marshal GraphQL на Java POJO? - PullRequest
0 голосов
/ 16 мая 2018

Очень плохо знаком с GraphQL ...

Отправляю запросы GraphQL на внешний сервер, который контролируется третьей стороной.

Использование этого запроса GraphQL:

query Photos($first: Int!, $propertyId: String) {
  viewer {
    content {
      contentLists(first: $first, property_id: $propertyId, contentListType: IMAGE, publishState: PUBLISHED, orderBy: originalPublishDate, orderByDirection: DESC) {
        edges {
          node {
            id
            title
            caption
            originalPublishDate
            lastModifiedDate
            contents(first: $first) {
              edges {
                node {
                  id
                  title
                  caption
                  type
                  ... on Image {
                    asset {
                      createdDate
                      lastModifiedDate
                      id
                      url
                      title
                      height
                      width
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Переменные запроса:

{
  "propertyId" : "23456832-7862-5679-4342-415f32385830",
  "first": 20
}

Используя этот фрагмент кода, я могу отправить запрос на внешний сервер:

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer "+accessToken);

HttpEntity<String> entity = new HttpEntity<String>(request,headers);
String response = restTemplate.postForObject(EXTERNAL_URL, entity, String.class);

Получен следующий ответ:

{
"data": {
    "viewer": {
        "content": {
            "contentLists": {
                "edges": [
                {
                    "node": {
                    "id": "3510e8f7-452s-f531-43b0-ac36ba979e5a9f4m",
                    "title": "Homer Simpson goes Camping",
                    "caption": "Homer Simpson goes Camping",
                    "originalPublishDate": "2018-02-18T03:31:56.352Z",
                    "lastModifiedDate": "2018-02-18T03:32:13.530Z",
                    "contents": {
                        "edges": [
                        {
                            "node": {
                                "id": "3506d951-1332-86fg-42bc-b11183db50394f40",
                                "title": "No Title",
                                "caption": "",
                                "type": "IMAGE",
                                "asset": {
                                    "createdDate": "2018-02-18T03:31:38.406Z",
                                    "lastModifiedDate": "2018-02-18T03:31:38.991Z",
                                    "id": "65037262-7169-7065-7861-7035676a6f65323467617866",
                                    "url": "",
                                    "title": "No Title",
                                    "height": null,
                                    "width": null
                                }
                            }
                        }
                    ]
                }
            }
         }
      ]
    }
  }

Использование этих библиотек Java:

<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-java</artifactId>
    <version>8.0</version>
</dependency>

<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.0.0</version>
</dependency>

Как я могу упорядочить ответ на POJO и / или ArrayList POJO?

Есть ли лучший набор библиотек, который мог бы помочь мне разобрать / маршалировать GraphQL с помощью Java?

Сторонний сервер, кстати, не предоставляет файл схемы GraphQL ...

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы можете проверить эту библиотеку Java под названием

Glitr (GraphQL to Java) , а руководство по здесь .

Вотего сладкие поддерживаемые типы,

GraphQLString           String
GraphQLBoolean          Boolean
GraphQLInt              Integer
GraphQLFloat            Float
GraphQLObjectType       Any POJO
GraphQLInterfaceType    Any interface type
GraphQLUnionType        Not supported
GraphQLEnumType         Any enum type
GraphQLInputObjectType  Any POJO
GraphQLList             Any implementing class of Collection
GraphQLNonNull          See @GlitrNonNull
0 голосов
/ 20 мая 2018

Если вам нужно сгенерировать эти классы только один раз и использовать их для каждого последующего вызова, тогда вы можете загрузить инструмент отображения JSON в POJO.Есть много доступных утилит;просто в быстром поиске я смог найти несколько вариантов:

Когда у вас есть классы POJO, вы можете использовать стандартный картограф Джексона для получения класса

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer "+accessToken);

HttpEntity<String> entity = new HttpEntity<String>(request,headers);
String rawResponse = restTemplate.postForObject(EXTERNAL_URL, entity, String.class);

ObjectMapper objectMapper = new ObjectMapper();
PhotoQueryResponse response = objectMapper.readValue(rawResponse, PhotoQueryResponse.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...