java为什么在此GraphQL设置中不调用DataFetcher?
我想写一段代码,它将处理如下GraphQL查询:
query {
group(id: "com.graphql-java")
name(name: "graphql-java")
version(id: "2.3.0")
}
我创建了一个数据获取程序,并在get
方法中放置了一个断点:
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
public class TestDataFetcher implements DataFetcher {
public Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
return null;
}
}
然后我编写了以下代码:
public class Example02 {
public static void main(final String[] args) throws IOException {
final Example02 app = new Example02();
app.run();
}
void run() throws IOException {
final TestDataFetcher testDataFetcher = new TestDataFetcher();
final List<GraphQLFieldDefinition> fields = Lists.newArrayList(
createGroupField(testDataFetcher),
createNameField(),
createVersionField());
final GraphQLObjectType queryType = newObject()
.name("query")
.fields(fields)
.build();
final GraphQLSchema schema = GraphQLSchema.newSchema()
.query(queryType)
.build();
final String query = FileUtils.readFileToString(
new File("src/main/resources/query1.txt"),
"UTF-8"
);
final Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute(query).getData();
System.out.println(result);
}
private GraphQLFieldDefinition createVersionField() {
return newFieldDefinition().type(GraphQLString).name("version").build();
}
private GraphQLFieldDefinition createNameField() {
return newFieldDefinition().type(GraphQLString).name("name").build();
}
private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) {
final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build();
return newFieldDefinition()
.type(GraphQLString)
.name("group")
.dataFetcher(testDataFetcher)
.argument(idArg)
.build();
}
}
在调试模式下运行main
方法时,断点未激活
为什么??我怎样才能修好它
# 1 楼答案
这是你的工作样本。 我已经使用了你发布的查询文件。 根据需要进一步实现dataFetcher。 基本上,您应该定义名称和版本字段的参数。 当你运行
new GraphQL(schema).execute(query)
时,调试器会告诉你一切 它有errors
数组,其中包含所有问题# 2 楼答案
你的问题是你的疑问。如果调试变量
query
,它就是query {\n group(id: "com.graphql-java")\n name(name: "graphql-java")\n version(id: "2.3.0")\n}
。 问题是查询中的“\n”如果将查询更改为
query{group(id: "com.graphql-java")}
,将执行断点要执行查询,我必须首先更新GraphQlFiledDefinitions以接收参数
然后我就可以使用不带换行符的查询了
query {group(id: "com.graphql-java"),name(name:"graphql-java"),version(id: "2.3.0")}