当使用Spring引导程序启动graphql时,数据获取时抛出的所有异常在输出控制台中显示为“执行查询时的内部服务器错误”我想要的只是GraphQLException的e.message()字符串我抛出来自Graphql中错误字段的“消息”部分,以便此API的前端可以看到出错的地方.
我用google搜索无济于事.大多数人通过编辑Servlet来揭露错误,但由于我使用的是Spring Boot启动程序,因此无法轻松完成.我知道starter使用的graphql-servlet有一个名为DefaultGraphQLErrorHandler的类,发现here,但我不知道如何覆盖或更改它,或者只是以某种方式显示这些错误.
我尝试覆盖graphql中的SimpleDataFetcherExceptionHandler,创建一个覆盖GraphQlException但不起作用的CustomException,在调试期间从未调用过SimpleDataFetcherExceptionHandler实现.
我只看到这个:
谢谢
解决方法:
所以我想出来了.我必须提供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
}
}