From 7bc8cea8ed608ddb19050f2ba2c9af08cb16eea1 Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Tue, 15 Sep 2020 03:29:15 +1000 Subject: [PATCH] add http headers for the response --- .../reactive/components/GraphQLController.java | 16 +++++++++------- .../servlet/components/GraphQLController.java | 14 ++++++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/spring-graphql-webflux/src/main/java/org/springframework/graphql/reactive/components/GraphQLController.java b/spring-graphql-webflux/src/main/java/org/springframework/graphql/reactive/components/GraphQLController.java index 0ea5f9b5..d24ea4b3 100644 --- a/spring-graphql-webflux/src/main/java/org/springframework/graphql/reactive/components/GraphQLController.java +++ b/spring-graphql-webflux/src/main/java/org/springframework/graphql/reactive/components/GraphQLController.java @@ -65,19 +65,21 @@ public class GraphQLController { serverRequest.headers().asHttpHeaders(), serverRequest.queryParams()); return graphQLHandler.graphqlPOST(graphQLHttpRequest); - }).flatMap(graphQLResponseBody -> { + }).flatMap(graphQLHttpResponse -> { //TODO: this should be handled better: // we don't want to serialize `null` values for `errors` and `extensions` // this is why we convert it to a Map here Map responseBodyRaw = new LinkedHashMap<>(); - responseBodyRaw.put("data", graphQLResponseBody.getData()); - if (graphQLResponseBody.getErrors() != null) { - responseBodyRaw.put("errors", graphQLResponseBody.getErrors()); + responseBodyRaw.put("data", graphQLHttpResponse.getData()); + if (graphQLHttpResponse.getErrors() != null) { + responseBodyRaw.put("errors", graphQLHttpResponse.getErrors()); } - if (graphQLResponseBody.getExtensions() != null) { - responseBodyRaw.put("extensions", graphQLResponseBody.getExtensions()); + if (graphQLHttpResponse.getExtensions() != null) { + responseBodyRaw.put("extensions", graphQLHttpResponse.getExtensions()); } - return ServerResponse.ok().bodyValue(responseBodyRaw); + return ServerResponse.ok().headers(httpHeaders -> { + httpHeaders.addAll(graphQLHttpResponse.getHttpHeaders()); + }).bodyValue(responseBodyRaw); }); } diff --git a/spring-graphql-webmvc/src/main/java/org/springframework/graphql/servlet/components/GraphQLController.java b/spring-graphql-webmvc/src/main/java/org/springframework/graphql/servlet/components/GraphQLController.java index ab0508b2..343f5d57 100644 --- a/spring-graphql-webmvc/src/main/java/org/springframework/graphql/servlet/components/GraphQLController.java +++ b/spring-graphql-webmvc/src/main/java/org/springframework/graphql/servlet/components/GraphQLController.java @@ -78,20 +78,22 @@ public class GraphQLController { serverRequest.params()); Mono> responseRawMono = graphQLHandler.graphqlPOST(graphQLHttpRequest) - .map(graphQLResponseBody -> { + .map(graphQLHttpResponse -> { //TODO: this should be handled better: // we don't want to serialize `null` values for `errors` and `extensions` // this is why we convert it to a Map here Map responseBodyRaw = new LinkedHashMap<>(); - responseBodyRaw.put("data", graphQLResponseBody.getData()); - if (graphQLResponseBody.getErrors() != null) { - responseBodyRaw.put("errors", graphQLResponseBody.getErrors()); + responseBodyRaw.put("data", graphQLHttpResponse.getData()); + if (graphQLHttpResponse.getErrors() != null) { + responseBodyRaw.put("errors", graphQLHttpResponse.getErrors()); } - if (graphQLResponseBody.getExtensions() != null) { - responseBodyRaw.put("extensions", graphQLResponseBody.getExtensions()); + if (graphQLHttpResponse.getExtensions() != null) { + responseBodyRaw.put("extensions", graphQLHttpResponse.getExtensions()); } return responseBodyRaw; }); + //TODO: how to add http headers for the response here? It is part of responseRawMono but + // ServerResponse don't accept a CompletableFuture or Mono as headers. return ServerResponse.ok().body(responseRawMono); }