java – 为什么在此GraphQL设置中没有调用DataFetcher?

前端之家收集整理的这篇文章主要介绍了java – 为什么在此GraphQL设置中没有调用DataFetcher?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想编写一段代码,它将处理像这样的GraphQL查询
  1. query {
  2. group(id: "com.graphql-java")
  3. name(name: "graphql-java")
  4. version(id: "2.3.0")
  5. }

我创建了一个数据提取器,并在get方法中放置一个断点:@H_403_5@

  1. import graphql.schema.DataFetcher;
  2. import graphql.schema.DataFetchingEnvironment;
  3.  
  4. public class TestDataFetcher implements DataFetcher {
  5. public Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
  6. return null;
  7. }
  8. }

然后我写了以下代码:@H_403_5@

  1. public class Example02 {
  2. public static void main(final String[] args) throws IOException {
  3. final Example02 app = new Example02();
  4. app.run();
  5. }
  6. void run() throws IOException {
  7. final TestDataFetcher testDataFetcher = new TestDataFetcher();
  8.  
  9. final List<GraphQLFieldDefinition> fields = Lists.newArrayList(
  10. createGroupField(testDataFetcher),createNameField(),createVersionField());
  11.  
  12. final GraphQLObjectType queryType = newObject()
  13. .name("query")
  14. .fields(fields)
  15. .build();
  16. final GraphQLSchema schema = GraphQLSchema.newSchema()
  17. .query(queryType)
  18. .build();
  19. final String query = FileUtils.readFileToString(
  20. new File("src/main/resources/query1.txt"),"UTF-8"
  21. );
  22. final Map<String,Object> result = (Map<String,Object>) new GraphQL(schema).execute(query).getData();
  23. System.out.println(result);
  24. }
  25.  
  26. private GraphQLFieldDefinition createVersionField() {
  27. return newFieldDefinition().type(GraphQLString).name("version").build();
  28. }
  29.  
  30. private GraphQLFieldDefinition createNameField() {
  31. return newFieldDefinition().type(GraphQLString).name("name").build();
  32. }
  33.  
  34. private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) {
  35. final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build();
  36. return newFieldDefinition()
  37. .type(GraphQLString)
  38. .name("group")
  39. .dataFetcher(testDataFetcher)
  40. .argument(idArg)
  41. .build();
  42. }
  43. }

当我在调试模式下运行main方法时,断点不被激活.@H_403_5@

为什么?我该怎么解决?@H_403_5@

解决方法

这是您的工作示例.
我已经使用你发布的查询文件.
根据需要进一步实现您的dataFetcher.
基本上你应该定义名称和版本字段的参数.
当您运行新的GraphQL(架构).execute(query)时,调试器会告诉所有内容
它具有包含所有问题的错误数组.
  1. import graphql.GraphQL;
  2. import graphql.schema.*;
  3. import org.apache.commons.io.FileUtils;
  4.  
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import static graphql.Scalars.GraphQLString;
  12. import static graphql.schema.GraphQLArgument.newArgument;
  13. import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
  14. import static graphql.schema.GraphQLObjectType.newObject;
  15.  
  16. public class Example2 {
  17.  
  18.  
  19. public class TestDataFetcher implements DataFetcher {
  20. public Object get(DataFetchingEnvironment environment) {
  21. String id = (String)environment.getArgument("id");
  22. return id;
  23. }
  24. }
  25.  
  26. public static void main(final String[] args) {
  27. Example2 app = new Example2();
  28. app.run();
  29. }
  30. void run() {
  31. TestDataFetcher testDataFetcher = new TestDataFetcher();
  32.  
  33. List<GraphQLFieldDefinition> fields = new ArrayList<GraphQLFieldDefinition>();
  34.  
  35. fields.add(createGroupField(testDataFetcher));
  36. fields.add(createNameField());
  37. fields.add(createVersionField());
  38.  
  39. GraphQLObjectType queryType = newObject()
  40. .name("query")
  41. .fields(fields)
  42. .build();
  43.  
  44. GraphQLSchema schema = GraphQLSchema.newSchema()
  45. .query(queryType)
  46. .build();
  47. String query = null;
  48. try {
  49. query = FileUtils.readFileToString(
  50. new File("src/main/resources/query1.txt"),"UTF-8"
  51. );
  52. }catch(IOException ioe){
  53. ioe.printStackTrace();
  54. }
  55.  
  56. if(query!=null) {
  57. Map<String,Object>) new GraphQL(schema).execute(query).getData();
  58. System.out.println(result);
  59. }
  60. }
  61.  
  62. private GraphQLFieldDefinition createVersionField() {
  63. GraphQLArgument arg = newArgument().name("id").type(GraphQLString).build();
  64. return newFieldDefinition().type(GraphQLString).name("version").argument(arg).build();
  65. }
  66.  
  67. private GraphQLFieldDefinition createNameField() {
  68. GraphQLArgument arg = newArgument().name("name").type(GraphQLString).build();
  69. return newFieldDefinition().type(GraphQLString).name("name").argument(arg).build();
  70. }
  71.  
  72. private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) {
  73. final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build();
  74. return newFieldDefinition()
  75. .type(GraphQLString)
  76. .name("group")
  77. .dataFetcher(testDataFetcher)
  78. .argument(idArg)
  79. .build();
  80. }
  81. }

猜你在找的Java相关文章