При использовании стартера Spring Boot для graphql все исключения, возникающие при выборке данных, отображаются в консоли вывода как «Внутренние ошибки сервера при выполнении запроса». Я бы хотел, чтобы выводилась только строка e.message() из GraphQLException, который я выбрасываю. части «сообщение» поля ошибки в Graphql, чтобы интерфейсная часть этого API могла видеть, что пошло не так.
Я погуглил это безрезультатно. Большинство людей выявляют ошибки, редактируя сервлет, но, поскольку я использую стартер Spring Boot, я не могу сделать это легко. Я знаю, что у graphql-servlet, используемого стартером, есть класс под названием DefaultGraphQLErrorHandler, найденный здесь, но я не знаю, как переопределить или изменить его или просто каким-то образом отобразить эти ошибки.
Я попытался переопределить SimpleDataFetcherExceptionHandler в graphql, создав CustomException, которое переопределяет GraphQlException, но ни один из них не работал, реализация SimpleDataFetcherExceptionHandler никогда не вызывалась во время отладки.
Я только такое вижу:
Спасибо
Итак, я понял это. Мне пришлось предоставить настраиваемую реализацию GraphQLErrorHandlerа также, добавить его в список bean-компонентов, пометив как @Component. Затем я переопределил функцию processErrors() в обработчике ошибок. Когда этот компонент был помечен как компонент, этот bean-компонент был автоматически подключен к конфигуратору serverlet graphql в стартовом пакете загрузки graphql spring, заменив тот, который используется по умолчанию.
Добавленный мной 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
}
}
теперь результат выглядит так:

Подобно этому подходу, у меня был класс конфигурации, который представлял реализацию @beanGraphQLErrorHandler. Это работало для меня до моей недавней попытки обновления с com.graphql-java-kickstart:graphql-spring-boot-starter:5.2 на com.graphql-java-kickstart:graphql-spring-boot-starter:5.4 | 5.3.1. Есть версия 5.4.1-SNAPSHOT, в которой это исправлено. Рекомендую следить за билетом здесь
@Guchelkaben Я столкнулся с аналогичной проблемой. Мой GraphQLErrorHandler не вызывается. Могу я узнать, разрешили ли вы это. Мой сервлет Gragpql версии 6.x
Отличное решение работает как шарм.
Более компактный способ записи на котлине будет выглядеть так:
@Component
class CustomGraphQlErrorHandler : GraphQLErrorHandler {
override fun processErrors(errors: MutableList<GraphQLError>?) =
errors?.map { GenericGraphQLError(it.message) }?.toMutableList() ?: mutableListOf()
}
Мне очень нравится функциональный стиль этого
Реализация SimpleDataFetcherExceptionHandler будет вызываться, когда у вас есть graphql.servlet.exception-handlers-enabled=true в application.properties
Спасибо за ваш пост, но мой GraphQErrorHandler не вызывается. Я всегда получаю внутренние ошибки сервера при выполнении запроса. Любое предложение? Может быть, у вас есть другие версии зависимостей для graphql?