gpt4 book ai didi

java - 为什么在此 GraphQL 设置中未调用 DataFetcher?

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:31 24 4
gpt4 key购买 nike

我想写一段代码来处理像这样的 GraphQL 查询:

  query {
group(id: "com.graphql-java")
name(name: "graphql-java")
version(id: "2.3.0")
}

我创建了一个数据 getter 并在 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();
}
}

当我在 Debug模式下运行 main 方法时,断点没有被激活。

为什么?我该如何解决?

最佳答案

这是您的工作示例。我已经使用了您发布的查询文件。根据需要进一步实现您的 dataFetcher。基本上您应该已经定义了名称和版本字段的参数。当您运行 new GraphQL(schema).execute(query) 时,调试器会告诉您一切它有包含所有问题的 errors 数组。

import graphql.GraphQL;
import graphql.schema.*;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static graphql.Scalars.GraphQLString;
import static graphql.schema.GraphQLArgument.newArgument;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;

public class Example2 {


public class TestDataFetcher implements DataFetcher {
public Object get(DataFetchingEnvironment environment) {
String id = (String)environment.getArgument("id");
return id;
}
}

public static void main(final String[] args) {
Example2 app = new Example2();
app.run();
}
void run() {
TestDataFetcher testDataFetcher = new TestDataFetcher();

List<GraphQLFieldDefinition> fields = new ArrayList<GraphQLFieldDefinition>();

fields.add(createGroupField(testDataFetcher));
fields.add(createNameField());
fields.add(createVersionField());

GraphQLObjectType queryType = newObject()
.name("query")
.fields(fields)
.build();

GraphQLSchema schema = GraphQLSchema.newSchema()
.query(queryType)
.build();
String query = null;
try {
query = FileUtils.readFileToString(
new File("src/main/resources/query1.txt"),
"UTF-8"
);
}catch(IOException ioe){
ioe.printStackTrace();
}

if(query!=null) {
Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute(query).getData();
System.out.println(result);
}
}

private GraphQLFieldDefinition createVersionField() {
GraphQLArgument arg = newArgument().name("id").type(GraphQLString).build();
return newFieldDefinition().type(GraphQLString).name("version").argument(arg).build();
}

private GraphQLFieldDefinition createNameField() {
GraphQLArgument arg = newArgument().name("name").type(GraphQLString).build();
return newFieldDefinition().type(GraphQLString).name("name").argument(arg).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();
}
}

关于java - 为什么在此 GraphQL 设置中未调用 DataFetcher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com