Разоблачение исключений GraphqlException с помощью пружинного загрузчика - PullRequest
0 голосов
/ 04 мая 2018

При использовании Spring Boot Starter для graphql все исключения, возникающие при извлечении данных, отображаются в консоли вывода как «Внутренняя ошибка сервера (ов) при выполнении запроса». Я хотел бы просто строку e.message() GraphQLException Я выбрасываю, чтобы выйти из части сообщения в поле ошибки в Graphql, чтобы интерфейс этого API мог видеть, что пошло не так.

Я гуглил это безрезультатно. Большинство людей выявляют ошибки, редактируя сервлет, но поскольку я использую стартер Spring Boot, я не могу сделать это легко. Я знаю, что graphql-servlet используемый стартером имеет класс DefaultGraphQLErrorHandler found here , но я не знаю, как его переопределить или изменить, или просто каким-то образом заставить эти ошибки отображаться.

Я попытался переопределить SimpleDataFetcherExceptionHandler в graphql, создав CustomException, который переопределяет GraphQlException, но ни одна не работала, реализация SimpleDataFetcherExceptionHandler никогда не вызывалась во время отладки.

Я только когда-либо вижу это:

Graphql error output

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Отличное решение работает как шарм.

Более компактный способ написания на kotlin выглядел бы так:

@Component
class CustomGraphQlErrorHandler : GraphQLErrorHandler {

    override fun processErrors(errors: MutableList<GraphQLError>?) =
            errors?.map { GenericGraphQLError(it.message) }?.toMutableList() ?: mutableListOf()

}

Мне очень нравится функциональный стиль этого

0 голосов
/ 05 мая 2018

Так что я понял это. Мне пришлось предоставить пользовательскую реализацию GraphQLErrorHandler и добавить ее в список bean-компонентов, пометив как @Component. Затем я переопределил функцию processErrors() в обработчике ошибок. Когда этот компонент был помечен как компонент, он был автоматически подключен к конфигуратору серверного графа graphql в стартовом пакете начальной загрузки graphql, заменив его по умолчанию.

добавленное мной CustomGraphQlErrorHandler видно ниже:

import graphql.GraphQLError
import graphql.servlet.GenericGraphQLError
import graphql.servlet.GraphQLErrorHandler
import org.springframework.stereotype.Component

@Component
class CustomGraphQlErrorHandler: GraphQLErrorHandler {

    override fun processErrors(errors: MutableList<GraphQLError>?): MutableList<GraphQLError> {
        val errorList = mutableListOf<GraphQLError>()
        for(error in errors!!){
            errorList.add(GenericGraphQLError(error.message))
        }
        return errorList
    }

} 

вывод теперь выглядит так: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...