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