Java 使用grapiql的GraphQl变量-变量未定义
我正在使用此端点:Java 使用grapiql的GraphQl变量-变量未定义,java,graphql,graphql-java,graphiql,Java,Graphql,Graphql Java,Graphiql,我正在使用此端点: @PostMapping("graphql") public ResponseEntity<Object> getResource(@RequestBody Object query) { // String query ExecutionResult result; if (query instanceof String) { result = graphQL.execute(query.toSt
@PostMapping("graphql")
public ResponseEntity<Object> getResource(@RequestBody Object query) { // String query
ExecutionResult result;
if (query instanceof String) {
result = graphQL.execute(query.toString()); // if plain text
} else{
String queryString = ((HashMap) query).get("query").toString();
Object variables = ((HashMap) query).get("variables");
ExecutionInput input = ExecutionInput.newExecutionInput()
.query(queryString)
.variables((Map<String, Object>) variables) // "var1" -> "test1"
.build();
result = graphQL.execute(input);
}
return new ResponseEntity<Object>(result, HttpStatus.OK);
}
当我添加变量
时,它开始失败,请参见此处:
query {
getItem(dictionaryType: $var1) {
code
name
description
}
}
在我的schema
中,我定义了query
部分,如下所示:
type Query {
getItem(dictionaryType: String): TestEntity
}
在java
code中:
@Value("classpath:test.graphqls")
private Resource schemaResource;
private GraphQL graphQL;
@PostConstruct
private void loadSchema() throws IOException {
File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry registry = new SchemaParser().parse(schemaFile);
RuntimeWiring wiring = buildWiring();
GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(registry, wiring);
graphQL = GraphQL.newGraphQL(schema).build();
}
private RuntimeWiring buildWiring() {
initializeFetchers();
return RuntimeWiring.newRuntimeWiring()
.type("Query", typeWriting -> typeWriting
.dataFetcher("getItem", dictionaryItemFetcher)
)
.build();
}
private void initializeFetchers() {
dictionaryItemFetcher = dataFetchingEnvironment ->
dictionaryService.getDictionaryItemsFirstAsString(dataFetchingEnvironment.getArgument("dictionaryType"));
}
操作中使用的任何变量都必须声明为操作定义的一部分,如下所示:
query OptionalButRecommendedQueryName ($var1: String) {
getItem(dictionaryType: $var1) {
code
name
description
}
}
这允许GraphQL根据提供的类型验证变量,还可以验证变量是否用于替代正确的输入。请更新您的问题。图像应该被删除,并替换为您试图查询的文本以及您收到的错误。这将帮助遇到相同错误的其他人找到这个问题,并且如果你发布的图片被删除,这将防止问题的发生。丹尼尔-将来可以自由建议编辑-我很乐意接受。我在堆栈溢出上使用了一个可用的选项——仅此而已。我马上修改这个问题。
query OptionalButRecommendedQueryName ($var1: String) {
getItem(dictionaryType: $var1) {
code
name
description
}
}