open fun springGraphQLDgsQueryExecutor()

in graphql-dgs-spring-graphql/src/main/kotlin/com/netflix/graphql/dgs/springgraphql/autoconfig/DgsSpringGraphQLAutoConfiguration.kt [538:575]


    open fun springGraphQLDgsQueryExecutor(
        executionService: ExecutionGraphQlService,
        dgsContextBuilder: DefaultDgsGraphQLContextBuilder,
        dgsDataLoaderProvider: DgsDataLoaderProvider,
        requestCustomizer: ObjectProvider<DgsQueryExecutorRequestCustomizer>,
        graphQLContextContributors: List<GraphQLContextContributor>,
    ): DgsQueryExecutor =
        SpringGraphQLDgsQueryExecutor(
            executionService,
            dgsContextBuilder,
            dgsDataLoaderProvider,
            requestCustomizer = requestCustomizer.getIfAvailable(DgsQueryExecutorRequestCustomizer::DEFAULT_REQUEST_CUSTOMIZER),
            graphQLContextContributors,
        )

    /**
     * Backward compatibility for setting response headers through a "dgs-response-headers" field in extensions, or using DgsExecutionResult.
     * While this can easily be done through a custom WebGraphQlInterceptor, this bean provides backward compatibility with older code.
     */
    @Bean
    @ConditionalOnProperty(
        prefix = "${AUTO_CONF_PREFIX}.dgs-response-headers",
        name = ["enabled"],
        havingValue = "true",
        matchIfMissing = true,
    )
    open fun dgsHeadersInterceptor(): WebGraphQlInterceptor =
        WebGraphQlInterceptor { request, chain ->
            chain.next(request).doOnNext { response: WebGraphQlResponse ->
                val responseHeadersExtension = response.extensions["dgs-response-headers"]
                if (responseHeadersExtension is HttpHeaders) {
                    response.responseHeaders.addAll(responseHeadersExtension)
                }
                if (response.executionResult is DgsExecutionResult) {
                    response.responseHeaders.addAll((response.executionResult as DgsExecutionResult).headers)
                }
            }
        }