From a7cf5b6d558a63191c6529bec8cc14f6bd430352 Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Tue, 15 Sep 2020 03:14:26 +1000 Subject: [PATCH] pass params to interceptor --- .../springframework/graphql/GraphQLHandler.java | 14 +++++++++----- .../graphql/GraphQLInterceptor.java | 14 +++++++++++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLHandler.java b/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLHandler.java index 29532830..349eb15e 100644 --- a/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLHandler.java +++ b/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLHandler.java @@ -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 = interceptor.preHandle(input, graphQLHttpRequest.getHttpHeaders()); + MultiValueMap requestParams = graphQLHttpRequest.getRequestParams(); + Mono 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 toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) { + private Mono toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders, MultiValueMap requestParams) { Map responseBodyRaw = executionResult.toSpecification(); Object data = responseBodyRaw.get("data"); List> errors = (List>) responseBodyRaw.get("errors"); @@ -41,7 +45,7 @@ public class GraphQLHandler { GraphQLHttpResponse responseBody = new GraphQLHttpResponse(data, errors, extensions, httpHeaders); - Mono graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders); + Mono graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders, requestParams); return graphQLResponseBodyMono; } diff --git a/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLInterceptor.java b/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLInterceptor.java index 3220ea82..496a594d 100644 --- a/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLInterceptor.java +++ b/spring-graphql-common/src/main/java/org/springframework/graphql/GraphQLInterceptor.java @@ -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 preHandle(ExecutionInput input, HttpHeaders headers) { + default Mono preHandle(ExecutionInput input, + HttpHeaders headers, + MultiValueMap requestParams) { return Mono.just(input); } - default Mono postHandle(ExecutionResult result, HttpHeaders httpHeaders) { + default Mono postHandle(ExecutionResult result, + HttpHeaders httpHeaders, + MultiValueMap requestParams) { return Mono.just(result); } - default Mono customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse, ExecutionResult executionResult, HttpHeaders httpHeader) { + default Mono customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse, + ExecutionResult executionResult, + HttpHeaders httpHeader, + MultiValueMap requestParams) { return Mono.just(graphQLHttpResponse); }