java – 为什么在此GraphQL设置中没有调用DataFetcher?
发布时间:2020-12-14 16:47:47 所属栏目:Java 来源:网络整理
导读:我想编写一段代码,它将处理像这样的GraphQL查询: query { group(id: "com.graphql-java") name(name: "graphql-java") version(id: "2.3.0") } 我创建了一个数据提取器,并在get方法中放置一个断点: import graphql.schema.DataFetcher; import graphql.sch
我想编写一段代码,它将处理像这样的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方法时,断点不被激活. 为什么?我该怎么解决? 解决方法
这是您的工作示例.
我已经使用你发布的查询文件. 根据需要进一步实现您的dataFetcher. 基本上你应该定义名称和版本字段的参数. 当您运行新的GraphQL(架构).execute(query)时,调试器会告诉所有内容 它具有包含所有问题的错误数组. 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>) 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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |