Ответ 1
Во-первых, вы должны проиллюстрировать больше о своей проблеме, из вашего образца запроса я не могу увидеть, какая часть у вас возникла, она может быть в аргументе, вложенном объекте или
Я тоже новичок в GraphQL (java), вместо того чтобы поделиться с вами прямым ответом, я намеревался показать вам, как я разрешаю аналогичную проблему.
graphql-java действительно отлично справился со своими тестовыми примерами. Вы можете обратиться сюда: https://github.com/andimarek/graphql-java/tree/master/src/test/groovy/graphql, чтобы получить некоторые идеи о том, как создавать и запрашивать схему GraphQL.
Аргументы
Я нашел такой же случай, как и ваш: https://github.com/andimarek/graphql-java/blob/master/src/test/groovy/graphql/StarWarsSchema.java#L131
newFieldDefinition()
.name("human")
.type(humanType)
.argument(newArgument()
.name("id")
.description("id of the human")
.type(new GraphQLNonNull(GraphQLString))
.build())
.dataFetcher(StarWarsData.getHumanDataFetcher())
.build())
В этом случае определяется только один аргумент, который является id. new GraphQLNonNull(GraphQLString)
сообщает, что это обязательный строковый аргумент.
Поля
Для полей он определяется в humanType
, вы можете обратиться к https://github.com/andimarek/graphql-java/blob/master/src/test/groovy/graphql/StarWarsSchema.java#L51.
Вложенные поля - это еще один тип с некоторыми полями, например .type(nestedHumanType)
Сбор данных
В конце концов, вы можете обработать аргумент id и вернуть некоторые данные. Вы можете обратиться к приведенному здесь примеру: https://github.com/andimarek/graphql-java/blob/master/src/test/groovy/graphql/StarWarsData.groovy#L84
Чтобы мой код выглядел более чистым, обычно я создам отдельный класс для DataFetcher, например:
public class HumanDataFetcher implements DataFetcher {
@Override
public Object get(DataFetchingEnvironment environment) {
String id = (String)environment.get("id");
// Your code here
}
}
Надеюсь, что это поможет.