GraphQL 变量未用于突变
GraphQL variables are not used in the mutation
我的突变查询:
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来发送带变量的请求,但是有同样的错误。
有什么想法吗?
耶!!原因是我的 GraphQLController
class 没有解析请求中的变量:
@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);
}
我的突变查询:
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来发送带变量的请求,但是有同样的错误。 有什么想法吗?
耶!!原因是我的 GraphQLController
class 没有解析请求中的变量:
@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);
}