Очень новичок в 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 ...
@TarunLalwani - как это может мне помочь, если я сказал вам, что внешний сервер закрыт и не предоставляет файл схемы GraphQL. Их представитель сказал мне разобрать JSON изначально. В предоставленном вами руководстве представлена схема / IDL. Тем не менее, спасибо за обращение.
Я думаю, вам все равно придется создавать POJO самостоятельно, поскольку вы знаете поля. Потому что у библиотеки нет способа узнать, на сколько объектов ее разбить. Или вы могли бы просто использовать библиотеку jackson и сопоставить ее с POJO из данных ответа. baeldung.com/jackson-object-mapper-tutorial. Если схемы нет, то POJO необходимо описать в одну или другую сторону.
Мои соболезнования @PacificNW_Lover. Как будто они не хотят, чтобы их сервис был легким в использовании.




Если вам нужно сгенерировать эти классы только один раз и использовать их для каждого последующего вызова, вы можете загрузить инструмент сопоставления 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);
Извините, я уже знаю об этих инструментах. Я спрашивал, есть ли способ маршалинга с использованием библиотек graphql-java.
@PacificNW_Lover У меня тоже такая же проблема, поэтому я решил создать свою собственную библиотеку, чтобы помочь разобрать ответ и запрос graphQL, вы можете взглянуть на это здесь github.com/daviestobialex/bpd-grapgql-parser, это не закончено, но это работа
Вы можете проверить эту java-библиотеку под названием,
Glitr (GraphQL для 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
Разве это не помогает? baeldung.com/graphql