当使用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或其他地方。

如果还有更好的方法,请留言。

广告
将在 10 秒后关闭
bannerAds