我在我的 Spring 应用程序中使用带有graphql -java-annotations的 graphql-java ( spring-graphql-common似乎非常有限,看起来不再维护),并且我正在努力处理子字段操作。
我有两个类A
,B
我想使用 GraphQL 访问它们,它们是:
class A {
@GraphQLField
Integer id;
@GraphQLField
String name;
@GraphQLField
List<B> listOfB;
}
class B {
@GraphQLField
Integer id;
@GraphQLField
String code;
}
我可以使用以下模式成功查询中的所有字段A
以及中的字段:B
@Component
public class Schema
{
public GraphQLObjectType aType;
public GraphQLSchema aSchema;
public GraphQLObjectType queryType;
@Autowired
public Schema(DataFetcher dataFetcher) throws IllegalAccessException, InstantiationException, NoSuchMethodException
{
aType = GraphQLAnnotations.object(A.class);
queryType =
GraphQLObjectType
.newObject()
.name("QueryType")
.field(GraphQLFieldDefinition.newFieldDefinition()
.name("a")
.type(aType)
.argument(GraphQLArgument.newArgument()
.name("id")
.type(new GraphQLNonNull(Scalars.GraphQLInt))
.build())
.dataFetcher(dataFetcher)
.build())
.build();
aSchema = GraphQLSchema.newSchema()
.query(queryType)
.build();
}
}
我可以a
通过以下请求成功过滤:
{
a(id:5)
{
id,
name,
listOfB
{
code
}
}
}
但是,当我尝试过滤时listOfB
,例如使用 atake
仅选择 X 记录时,出现错误Validation error of type UnknownArgument: Unknown argument take
:
{
a(id:5)
{
id,
name,
listOfB(take:3)
{
code
}
}
}
我理解错误的含义,因为我没有为listOfB
字段声明任何可能的参数 on A
,但我不知道如何使用graphql-java-annotations
.
我已经添加了一个特定DataFetcher
的listOfB
,在类中使用以下代码A
:
@GraphQLDataFetcher(BDataFetcher.class)
private List<B> listOfB;
当我检索时它确实被调用了listOfB
。
您对使用时如何向字段添加参数有任何想法graphql-java-annotations
吗?如果没有,是否有任何解决方法?
定义没有注释的模式并使用“经典”方式graphql-java
不是一种选择,因为我的模式真的很大:/
谢谢 :)