使用spring boot starter暴露GraphqlExceptions

当使用Spring引导程序启动graphql时,数据获取时抛出的所有异常在输出控制台中显示为“执行查询时的内部服务器错误”我想要的只是GraphQLException的e.message()字符串我抛出来自Graphql中错误字段的“消息”部分,以便此API的前端可以看到出错的地方.

我用google搜索无济于事.大多数人通过编辑Servlet来揭露错误,但由于我使用的是Spring Boot启动程序,因此无法轻松完成.我知道starter使用的graphql-servlet有一个名为DefaultGraphQLErrorHandler的类,发现here,但我不知道如何覆盖或更改它,或者只是以某种方式显示这些错误.

我尝试覆盖graphql中的SimpleDataFetcherExceptionHandler,创建一个覆盖GraphQlException但不起作用的CustomException,在调试期间从未调用过SimpleDataFetcherExceptionHandler实现.

我只看到这个:

使用spring boot starter暴露GraphqlExceptions

谢谢

解决方法:

所以我想出来了.我必须提供GraphQLErrorHandler的自定义实现,并通过标记为@Component将其添加到bean列表中.然后我在错误处理程序中覆盖了processErrors()函数.当标记为组件时,此bean自动装入graphql spring boot starter包中的graphql serverlet配置器中,替换默认值.

我添加的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
    }

} 

输出现在看起来像这样:
使用spring boot starter暴露GraphqlExceptions

上一篇:它最强大的优势在于,你能够精确的定义所需要的数据,并且毫无冗余


下一篇:GraphQL playground报错“Failed to fetch. Please check your connection“