作者:tttt | 来源:互联网 | 2022-12-18 15:37
当使用Spring引导程序启动graphql时,数据获取时抛出的所有异常在输出控制台中显示为"执行查询时的内部服务器错误"我希望我抛出的e.message()
字符串只是GraphQLException
从"消息"是Graphql中错误字段的一部分,这样这个API的前端就可以看出出了什么问题.
我用google搜索无济于事.大多数人通过编辑Servlet来暴露错误,但由于我使用的是Spring Boot启动程序,因此无法轻松完成.我知道graphql-servlet
启动器使用的类有一个名为DefaultGraphQLErrorHandler
find here的类,但我不知道如何覆盖或更改它,或者只是以某种方式显示这些错误.
我尝试重写SimpleDataFetcherExceptionHandler
in graphql,创建一个覆盖GraphQlException的CustomException但是都没有工作,SimpleDataFetcherExceptionHandler
在调试期间从未调用过实现.
我只看到这个:
谢谢
1> Young_Maker..:
所以我想出来了.我必须提供a的自定义实现,GraphQLErrorHandler
并通过标记为a将其添加到bean列表中@Component
.然后我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?): MutableList {
val errorList = mutableListOf()
for(error in errors!!){
errorList.add(GenericGraphQLError(error.message))
}
return errorList
}
}
输出现在看起来像这样: