pass params to interceptor

This commit is contained in:
Andreas Marek
2020-09-15 03:14:26 +10:00
parent 8238353f9a
commit a7cf5b6d55
2 changed files with 20 additions and 8 deletions

View File

@@ -4,6 +4,7 @@ import graphql.ExecutionInput;
import graphql.ExecutionResult;
import graphql.GraphQL;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;
import reactor.core.publisher.Mono;
import java.util.List;
@@ -26,14 +27,17 @@ public class GraphQLHandler {
.operationName(graphQLHttpRequest.getOperationName())
.variables(graphQLHttpRequest.getVariables())
.build();
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, graphQLHttpRequest.getHttpHeaders());
MultiValueMap<String, String> requestParams = graphQLHttpRequest.getRequestParams();
Mono<ExecutionInput> executionInput = interceptor.preHandle(input,
graphQLHttpRequest.getHttpHeaders(),
requestParams);
return executionInput
.flatMap(this::execute)
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders()))
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders()));
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders(), requestParams))
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders(), requestParams));
}
private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders, MultiValueMap<String, String> requestParams) {
Map<String, Object> responseBodyRaw = executionResult.toSpecification();
Object data = responseBodyRaw.get("data");
List<Map<String, Object>> errors = (List<Map<String, Object>>) responseBodyRaw.get("errors");
@@ -41,7 +45,7 @@ public class GraphQLHandler {
GraphQLHttpResponse responseBody = new GraphQLHttpResponse(data,
errors,
extensions, httpHeaders);
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders, requestParams);
return graphQLResponseBodyMono;
}

View File

@@ -3,19 +3,27 @@ package org.springframework.graphql;
import graphql.ExecutionInput;
import graphql.ExecutionResult;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;
import reactor.core.publisher.Mono;
public interface GraphQLInterceptor {
default Mono<ExecutionInput> preHandle(ExecutionInput input, HttpHeaders headers) {
default Mono<ExecutionInput> preHandle(ExecutionInput input,
HttpHeaders headers,
MultiValueMap<String, String> requestParams) {
return Mono.just(input);
}
default Mono<ExecutionResult> postHandle(ExecutionResult result, HttpHeaders httpHeaders) {
default Mono<ExecutionResult> postHandle(ExecutionResult result,
HttpHeaders httpHeaders,
MultiValueMap<String, String> requestParams) {
return Mono.just(result);
}
default Mono<GraphQLHttpResponse> customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse, ExecutionResult executionResult, HttpHeaders httpHeader) {
default Mono<GraphQLHttpResponse> customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse,
ExecutionResult executionResult,
HttpHeaders httpHeader,
MultiValueMap<String, String> requestParams) {
return Mono.just(graphQLHttpResponse);
}