Типобезопасный запрос Quarkus GraphQL создает неожиданный вложенный запросJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Типобезопасный запрос Quarkus GraphQL создает неожиданный вложенный запрос

Сообщение Anonymous »

Я создаю приложение Quarkus, которое запрашивает API Linear GraphQL по адресу: https://api.linear.app/graphql
Когда я использую динамический запрос, например следующее создает правильный запрос и возвращает правильный результат:

Код: Выделить всё

@Inject
@GraphQLClient("linear")
DynamicGraphQLClient dynamicClient;

@GET
@Path("/dynamicteams")
@Produces(MediaType.APPLICATION_JSON)
@Blocking
public JsonObject getTeams() throws Exception {

Document query = document(
operation(
field("teams",
field("nodes",
field("id"),
field("name")
)
)
)
);

Log.info("Query: " + query.build());
// ie Query: query { teams { nodes { id name } } }

Response response = dynamicClient.executeSync(query);

return response.getData();
}

пример ответа (анонимизированный):

Код: Выделить всё

{"teams":{"nodes":[{"id":"my-id-1","name":"Team 1"},{"id":"my-id-2","name":"Team 2"}]}}
Но когда я пробую то же самое, используя вариант TypeSafe, он создает запрос, который выглядит следующим образом. Обратите внимание, что правильный запрос теперь вложен в свойство «команды».

Код: Выделить всё

query teams { teams { nodes { id name } } }

Код: Выделить всё

@Inject
LinearClientApi typesafeClient;

@GET
@Path("/safeteams")
@Produces(MediaType.APPLICATION_JSON)
@Blocking
public TeamsResponse getSafeTeams() {
TeamsResponse resp = typesafeClient.getTeams();
Log.info("Response: " + resp.toString());
return resp;
}

и соответствующие классы:

Код: Выделить всё

@GraphQLClientApi(configKey = "linear-typesafe")
public interface LinearClientApi {

TeamsResponse getTeams();
}

public class TeamsResponse {

private List nodes;

public List getNodes() {
return nodes;
}

public void setNodes(List nodes) {
this.nodes = nodes;
}
}

public class TeamNode {
private String id;
private String name;

// Getters and setters
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Метка «команды» поступает из TeamsResponse getTeams();. Если я переопределяю имя с помощью аннотации @Query:

Код: Выделить всё

@Query(value="XXX")
TeamsResponse getTeams();
запрос строится как:

Код: Выделить всё

query XXX { XXX {nodes {id name}} }
Итак, как мне создать это «вложение»? Это должно быть очевидно, но я этого не вижу.
Спасибо,
Мюррей

Подробнее здесь: https://stackoverflow.com/questions/793 ... sted-query
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»