当使用Spring引导程序启动graphql时,数据获取时抛出的所有异常在输出控制台中显示为“执行查询时的内部服务器错误”我希望只有e.message()
字符串GraphQLException
我抛出来自Graphql中错误字段的“消息”部分,以便此API的前端可以看到出错的地方。
我用谷歌搜索这个无济于事。大多数人通过编辑Servlet来揭露错误,但由于我使用的是Spring Boot启动程序,因此无法轻松完成。我知道,starter使用的graphql-servlet
有一个名为DefaultGraphQLErrorHandler
的类here,但我不知道如何覆盖或更改它,或者只是以某种方式显示这些错误。
我尝试覆盖graphql中的SimpleDataFetcherExceptionHandler
,创建一个覆盖GraphQlException但没有工作的CustomException,但在调试期间从未调用过SimpleDataFetcherExceptionHandler
实现。
我只看到这个:
由于
答案 0 :(得分:5)
所以我想出来了。我必须提供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
}
}
答案 1 :(得分:1)
SimpleDataFetcherExceptionHandler
中拥有graphql.servlet.exception-handlers-enabled=true
时,将调用 application.properties
实现
答案 2 :(得分:0)
出色的解决方案就像魅力。
用kotlin编写的更紧凑的方法如下:
@Component
class CustomGraphQlErrorHandler : GraphQLErrorHandler {
override fun processErrors(errors: MutableList<GraphQLError>?) =
errors?.map { GenericGraphQLError(it.message) }?.toMutableList() ?: mutableListOf()
}
我真的很喜欢它的功能风格