java - 在 graphql-java 下尝试使用分析时出现 NonNullableFieldWasNullError
问题描述
我对graphql相当陌生,即使我搜索过,也找不到下面给出的错误的答案,任何帮助都将不胜感激。
我正在尝试使用 MaxQueryComplexityInstrumentation 来计算给定查询的复杂性。这里我使用的后端是一个模拟后端(https://api.graph.cool/simple/v1/swapi)。
下面给出的代码适用于本地 graphql 服务器,但不适用于模拟后端。我注意到的一个区别是,当为模式中的特定查询提供所需的符号(“!”)时,这似乎正在发生。
在用调试器尝试了代码后,我发现这个错误是由“.execute()”调用引起的。另外,请注意,模拟后端返回值并且不提供任何空值作为响应。
这是为设置 MaxQueryComplexityInstrumentation 而编写的代码。
private boolean queryComplexityAnalysis(String payload) {
GraphQL runtime = GraphQL.newGraphQL(schema)
.instrumentation(new MaxQueryComplexityInstrumentation(GraphQLAPISecurityConstants.MAX_QUERY_COMPLEXITY))
.build();
try {
ExecutionResult execution = runtime.execute(payload);
List<GraphQLError> errors = execution.getErrors();
if (errors.size()>0) {
for(GraphQLError temp : errors) {
log.error(temp);
}
return false;
}
System.out.println("Maximum query complexity was not exceeded");
return true;
} catch (Throwable e) {
log.error(e);
}
return false;
}
如果 MAX_QUERY_COMPLEXITY = 3,并且我传入一个复杂度为 7 的查询,它会给出正确的响应,说明超出了最大查询复杂度。
graphql.execution.AbortExecutionException: maximum query complexity exceeded 7 > 3
但是,如果我传入一个小于或等于 3 的查询(例如,“{ allFilms{title episodeId}}”),它会给出如下所示的 NonNullableFieldWasNullError。尽管这里的预期结果只是打印“未超过最大查询复杂度”。
NonNullableFieldWasNullError{message='Cannot return null for non-nullable type: 'null' within parent 'Query' (/allFilms)', path=[allFilms]}
任何帮助将不胜感激。提前致谢!
解决方案
推荐阅读
- service - Apache Ambari 自定义服务的重启要求
- kubernetes-helm - 使用 Helm 设置 Prometheus Ingress
- heroku - 当我回滚潜在客户数据库时,追随者数据库会发生什么
- azure - PowerShell:绑定资源组中的现有证书
- javascript - javascript中的问号后跟句号是什么意思?
- javascript - 如何使用基于两个集合文档的云函数触发器
- tsql - 无法通过 Max date 获得结果
- c - 我自己实现的 linux tail 函数输出错误
- flutter - Flutter - 未处理的异常
- python - 如何在 Pandas 数据框列中显示小数点后 2 位的值?