1

我的突变查询:

mutation ($matchId: String!) {
  assignMatch(matchId: $matchId) {
    id
  }
}

查询变量:

{ "matchId": "123" }

GraphQL 模式(突变定义):

type Mutation {
    assignMatch(matchId: String!): Assignment
}

GraphQL 服务器是用 Java 编写的。但我很确定请求不是事件到达它并且在 GraphQL 层上失败。无论如何,模式定义非常简单:GraphQL graphQL = GraphQL.newGraphQL(SchemaParser.newParser().file("schema.graphqls").build().makeExecutableSchema())

结果:消息错误Variable 'matchId' has coerced Null value for NonNull type 'String!

请注意,突变assignMatch(matchId: "123")成功。

我是否以错误的方式定义查询变量?或者为什么没有被 GraphiQL 接收?

我尝试使用 GraphiQL 接口和 apollo-client 来发送带有变量的请求,但有同样的错误。有任何想法吗?

4

1 回答 1

0

耶!!原因是我的GraphQLController班级没有从请求中解析变量:

@RequestMapping(value = "/graphql", method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public String execute(@RequestBody Map<String, Object> request) throws IOException {
    ExecutionInput executionInput = ExecutionInput.newExecutionInput()
            .query((String) request.get("query"))
            .operationName((String) request.get("operationName"))
            // THE FOLLOWING LINE WAS ABSENT:
            .variables((Map<String, Object>) request.get("variables"))
            .build();
    ExecutionResult executionResult = graphQL.execute(executionInput);
    return mapper.writeValueAsString(executionResult);
}
于 2018-02-17T13:17:49.723 回答