@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 とかに飛ばすことができる。
もっといい方法があればコメントください。