我想写一段代码,它将处理如下的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
方法时,断点不会被激活。
为什么呢?我该如何解决?
答案 0 :(得分:5)
这是您的工作样本。
我发布时使用了您的查询文件。
根据需要进一步实施您的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();
}
}
答案 1 :(得分:0)
您的问题是您的疑问。如果您调试变量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以接收参数。
private GraphQLFieldDefinition createVersionField(TestDataFetcher testDataFetcher) {
final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build();
return newFieldDefinition().type(GraphQLString).name("version").staticValue("id value").argument(idArg).build();
}
private GraphQLFieldDefinition createNameField(TestDataFetcher testDataFetcher) {
final GraphQLArgument nameArg = newArgument().name("name").type(GraphQLString).build();
return newFieldDefinition().type(GraphQLString).name("name").staticValue("name Value").argument(nameArg).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();
}
然后我可以使用没有换行query {group(id: "com.graphql-java"),name(name:"graphql-java"),version(id: "2.3.0")}