当使用Spring Boot时,如果想要将graphql-spring-boot的错误通知到某处
因为在 @RestControllerAdvice 中无法获取到,并且我想要比 @ExceptionHandler 提供更详细的信息。
环境
val spring_version=2.2.2.RELEASE
implementation("com.graphql-java-kickstart:graphql-spring-boot-starter:6.0.0")
implementation("org.springframework.boot:spring-boot-starter:$spring_version")
implementation("org.springframework.boot:spring-boot-starter-web:$spring_version")
代码例子
只需将 Map<String, ExecutionStrategy> 注册为 Bean 就可以了。
@Configuration
class GraphQLConfig {
@Bean
fun executionStrategies(): Map<String, ExecutionStrategy> {
val customDataFetcherExceptionHandler = CustomDataFetcherExceptionHandler
return mapOf(
"queryExecutionStrategy" to AsyncExecutionStrategy(customDataFetcherExceptionHandler),
"mutationExecutionStrategy" to AsyncSerialExecutionStrategy(customDataFetcherExceptionHandler)
)
}
class CustomDataFetcherExceptionHandler: SimpleDataFetcherExceptionHandler() {
override fun onException(handlerParameters: DataFetcherExceptionHandlerParameters): DataFetcherExceptionHandlerResult {
// いい感じに通知する
// もっと低レベルな情報がほしければ
// handlerParameters.dataFetchingEnvironment.getContext<GraphQLServletContext>().httpServletRequest とかでとれそう。
return super.onException(handlerParameters)
}
}
}
虽然我还不清楚AsyncExecutionStrategy和AsyncSerialExecutionStrategy哪个更好,但暂时可以用这个方法将错误发送到Slack或其他地方。
如果还有更好的方法,请留言。