Graphql-java: DataFetchEnvironment поступает как null на преобразователе запросов

Я использую graphql с java на стороне сервера и graphql / apollo с javascript на стороне клиента. В целом я очень доволен настройкой, но в последнее время я застрял в проблеме с DataFetchingEnvironment.

У меня есть два запроса graphql, которые идентично вызываются на стороне клиента. На стороне сервера методы преобразователя принимают DataFetchingEnvironment в качестве параметра, чтобы получить контекст и получить значение из передаваемого файла cookie.

Один запрос выполняется безупречно, и значение cookie считывается. По другому запросу DataFetchingEnvironment получает значение null.

Я не понимаю, почему это происходит. Существуют ли какие-либо причины или условия, при которых метод преобразователя graphql-java не должен получать среду выборки данных? Есть идеи относительно того, почему это может быть?

Вот мои зависимости pom, чтобы показать номера версий.

        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>3.10.0</version>

        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-java-tools</artifactId>
        <version>4.3.0</version>

        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-java-servlet</artifactId>
        <version>4.6.0</version>

        <groupId>com.zhokhov.graphql</groupId>
        <artifactId>graphql-datetime-spring-boot-starter</artifactId>
        <version>1.1.0</version>

Вот скелетная версия метода распознавания ошибок:

    public List<Something> getSomething( String somethingId, DataFetchingEnvironment dataFetchingEnvironment ) {
        log( dataFetchingEnvironment ); // result is null
    }

Вы разрешили это? У меня похожая проблема.

Vinnie 12.10.2018 15:20

@Vinnie Я не помню точных деталей, но это определенно была проблема с тем, как разрешается перегрузка резолвера и дополнительные поля. Мой лучший совет: внимательно просмотрите свои запросы / преобразователи, чтобы убедиться, что все до боли понятно для GraphQL. Его легко запутать. Старайтесь избегать перегрузки методов и убедитесь, что какой единственный метод обрабатывает запрос, до боли ясно, потому что процесс разрешения graphql может легко запутаться и подумать, что параметр среды выборки данных - это что-то еще.

Mark Nenadov 12.10.2018 15:47

Спасибо за ответ @Mark. Я думаю, что делал это неправильно - но, как оказалось, мне это все равно было не нужно.

Vinnie 12.10.2018 19:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
3
347
0

Другие вопросы по теме