使用grapiql的GraphQl变量-变量未定义

时间:2019-01-21 15:38:17

标签: java graphql graphql-java graphiql

我正在使用此端点:

<add key="AWSRegion" value="us-east-1" />

当我没有变量时,它可以正常工作:

 @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);
    }

enter image description here

当我添加query { getItem(dictionaryType: "test1") { code name description } } 时,它开始失败,请参见此处:

variable

enter image description here

在我的query { getItem(dictionaryType: $var1) { code name description } } 中,我定义了schema部分,如下所示:

query

type Query { getItem(dictionaryType: String): TestEntity } 代码中:

java

1 个答案:

答案 0 :(得分:1)

在操作中使用的任何变量都必须声明为操作定义的一部分,如下所示:

query OptionalButRecommendedQueryName ($var1: String) {
  getItem(dictionaryType: $var1) {
    code
    name
    description
  }
}

这使GraphQL可以根据提供的类型验证变量,还可以验证变量是否在代替正确的输入。