diff --git a/src/main/java/graphql/servlet/AbstractGraphQLHttpServlet.java b/src/main/java/graphql/servlet/AbstractGraphQLHttpServlet.java index 998a95e0..83a394fd 100644 --- a/src/main/java/graphql/servlet/AbstractGraphQLHttpServlet.java +++ b/src/main/java/graphql/servlet/AbstractGraphQLHttpServlet.java @@ -364,7 +364,7 @@ private void query(GraphQLQueryInvoker queryInvoker, GraphQLObjectMapper graphQL if (!(result.getData() instanceof Publisher || isDeferred)) { resp.setContentType(APPLICATION_JSON_UTF8); resp.setStatus(STATUS_OK); - resp.getWriter().write(graphQLObjectMapper.serializeResultAsJson(result)); + graphQLObjectMapper.serializeResultAsJson(resp.getWriter(), result); } else { if (req == null) { throw new IllegalStateException("Http servlet request can not be null"); @@ -414,7 +414,7 @@ private void queryBatched(GraphQLQueryInvoker queryInvoker, GraphQLBatchedInvoca writer.write("["); GraphQLObjectMapper graphQLObjectMapper = configuration.getObjectMapper(); while (executionInputIterator.hasNext()) { - writer.write(graphQLObjectMapper.serializeResultAsJson(executionInputIterator.next())); + graphQLObjectMapper.serializeResultAsJson(writer, executionInputIterator.next()); if (executionInputIterator.hasNext()) { writer.write(","); } @@ -558,7 +558,9 @@ public void onSubscribe(Subscription subscription) { public void onNext(ExecutionResult executionResult) { try { Writer writer = asyncContext.getResponse().getWriter(); - writer.write("data: " + graphQLObjectMapper.serializeResultAsJson(executionResult) + "\n\n"); + writer.write("data: "); + graphQLObjectMapper.serializeResultAsJson(writer, executionResult); + writer.write("\n\n"); writer.flush(); subscriptionRef.get().request(1); } catch (IOException ignored) { diff --git a/src/main/java/graphql/servlet/core/GraphQLObjectMapper.java b/src/main/java/graphql/servlet/core/GraphQLObjectMapper.java index 1c25ea29..1ca26dcb 100644 --- a/src/main/java/graphql/servlet/core/GraphQLObjectMapper.java +++ b/src/main/java/graphql/servlet/core/GraphQLObjectMapper.java @@ -16,6 +16,7 @@ import javax.servlet.http.Part; import java.io.IOException; import java.io.InputStream; +import java.io.Writer; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -101,6 +102,10 @@ public String serializeResultAsJson(ExecutionResult executionResult) { } } + public void serializeResultAsJson(Writer writer, ExecutionResult executionResult) throws IOException { + getJacksonMapper().writeValue(writer, createResultFromExecutionResult(executionResult)); + } + public boolean areErrorsPresent(ExecutionResult executionResult) { return graphQLErrorHandlerSupplier.get().errorsPresent(executionResult.getErrors()); }