Я довольно новичок в graphql и не могу найти ответ на приведенную ниже ошибку, хотя я искал, любая помощь будет принята с благодарностью.
Я пытаюсь использовать MaxQueryComplexityInstrumentation для вычисления сложностиданного запроса. Здесь я использовал бэкэнд-макет (https://api.graph.cool/simple/v1/swapi).
. Код, приведенный ниже, отлично работает для локального сервера graphql, но не работает с макетом бэкэнда. Одно отличие, которое я заметил, это когдатребуемый символ ("!") задается для этого конкретного запроса в схеме, которая, кажется, происходит.
После попытки выполнения кода с помощью отладчика я обнаружил, что эта ошибка вызвана ".execute() "call. Также обратите внимание, что фиктивный внутренний интерфейс возвращает значения и не дает никаких нулевых значений в качестве ответов.
Этот код написан для настройки 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, как показано ниже. Хотя ожидаемый результат здесь to просто напечатайте «Максимальная сложность запроса не превышена».
NonNullableFieldWasNullError{message='Cannot return null for non-nullable type: 'null' within parent 'Query' (/allFilms)', path=[allFilms]}
Любая помощь будет принята с благодарностью. Заранее спасибо!