in graphql-dgs-client/src/main/kotlin/com/netflix/graphql/dgs/client/WebClientGraphQLClient.kt [82:148]
override fun reactiveExecuteQuery(
@Language("graphql") query: String,
): Mono<GraphQLResponse> = reactiveExecuteQuery(query, emptyMap(), null)
/**
* @param query The query string. Note that you can use [code generation](https://netflix.github.io/dgs/generating-code-from-schema/#generating-query-apis-for-external-services) for a type safe query!
* @param variables A map of input variables
* @return A [Mono] of [GraphQLResponse]. [GraphQLResponse] parses the response and gives easy access to data and errors.
*/
override fun reactiveExecuteQuery(
@Language("graphql") query: String,
variables: Map<String, Any>,
): Mono<GraphQLResponse> = reactiveExecuteQuery(query, variables, null)
/**
* @param query The query string. Note that you can use [code generation](https://netflix.github.io/dgs/generating-code-from-schema/#generating-query-apis-for-external-services) for a type safe query!
* @param variables A map of input variables
* @param operationName Operation name
* @return A [Mono] of [GraphQLResponse]. [GraphQLResponse] parses the response and gives easy access to data and errors.
*/
override fun reactiveExecuteQuery(
@Language("graphql") query: String,
variables: Map<String, Any>,
operationName: String?,
): Mono<GraphQLResponse> = reactiveExecuteQuery(query, variables, operationName, REQUEST_BODY_URI_CUSTOMIZER_IDENTITY)
/**
* @param query The query string. Note that you can use [code generation](https://netflix.github.io/dgs/generating-code-from-schema/#generating-query-apis-for-external-services) for a type safe query!
* @param requestBodyUriCustomizer Allows customization of the URI and headers.
* This occurs before both, the [headersConsumer] and serialization of the GraphQL request to the body occurs.
* In other words, the [headersConsumer] will take precedence.
* @return A [Mono] of [GraphQLResponse]. [GraphQLResponse] parses the response and gives easy access to data and errors.
*/
fun reactiveExecuteQuery(
@Language("graphql") query: String,
requestBodyUriCustomizer: RequestBodyUriCustomizer,
): Mono<GraphQLResponse> = reactiveExecuteQuery(query, emptyMap(), null, requestBodyUriCustomizer)
/**
* @param query The query string. Note that you can use [code generation](https://netflix.github.io/dgs/generating-code-from-schema/#generating-query-apis-for-external-services) for a type safe query!
* @param variables A map of input variables
* @param operationName GraphQL Operation name
* @param requestBodyUriCustomizer Allows customization of the URI and headers.
* This occurs before both, the [headersConsumer] and serialization of the GraphQL request to the body occurs.
* In other words, the [headersConsumer] will take precedence.
* @return A [Mono] of [GraphQLResponse]. [GraphQLResponse] parses the response and gives easy access to data and errors.
*/
fun reactiveExecuteQuery(
@Language("graphql") query: String,
variables: Map<String, Any>,
operationName: String?,
requestBodyUriCustomizer: RequestBodyUriCustomizer,
): Mono<GraphQLResponse> {
val serializedRequest =
mapper.writeValueAsString(
GraphQLClients.toRequestMap(query = query, operationName = operationName, variables = variables),
)
return requestBodyUriCustomizer
.apply(webclient.post())
.headers { headers -> headers.addAll(GraphQLClients.defaultHeaders) }
.headers(this.headersConsumer)
.bodyValue(serializedRequest)
.retrieve()
.toEntity<String>()
.map { httpResponse -> handleResponse(httpResponse, serializedRequest) }
}