NonNullableFieldWasNullError при попытке использовать анализ в graphql-java - PullRequest
1 голос
/ 14 октября 2019

Я довольно новичок в 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]}

Любая помощь будет принята с благодарностью. Заранее спасибо!

...