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)
}
}
}