Skip to content

Commit 45033b0

Browse files
authored
Merge pull request #215 from shailender-bathula/master
Serialize query response directly to Servlet's output stream to avoid intermediate String object creation
2 parents cf922e4 + b837d28 commit 45033b0

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/main/java/graphql/servlet/AbstractGraphQLHttpServlet.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ private void query(GraphQLQueryInvoker queryInvoker, GraphQLObjectMapper graphQL
364364
if (!(result.getData() instanceof Publisher || isDeferred)) {
365365
resp.setContentType(APPLICATION_JSON_UTF8);
366366
resp.setStatus(STATUS_OK);
367-
resp.getWriter().write(graphQLObjectMapper.serializeResultAsJson(result));
367+
graphQLObjectMapper.serializeResultAsJson(resp.getWriter(), result);
368368
} else {
369369
if (req == null) {
370370
throw new IllegalStateException("Http servlet request can not be null");
@@ -414,7 +414,7 @@ private void queryBatched(GraphQLQueryInvoker queryInvoker, GraphQLBatchedInvoca
414414
writer.write("[");
415415
GraphQLObjectMapper graphQLObjectMapper = configuration.getObjectMapper();
416416
while (executionInputIterator.hasNext()) {
417-
writer.write(graphQLObjectMapper.serializeResultAsJson(executionInputIterator.next()));
417+
graphQLObjectMapper.serializeResultAsJson(writer, executionInputIterator.next());
418418
if (executionInputIterator.hasNext()) {
419419
writer.write(",");
420420
}
@@ -558,7 +558,9 @@ public void onSubscribe(Subscription subscription) {
558558
public void onNext(ExecutionResult executionResult) {
559559
try {
560560
Writer writer = asyncContext.getResponse().getWriter();
561-
writer.write("data: " + graphQLObjectMapper.serializeResultAsJson(executionResult) + "\n\n");
561+
writer.write("data: ");
562+
graphQLObjectMapper.serializeResultAsJson(writer, executionResult);
563+
writer.write("\n\n");
562564
writer.flush();
563565
subscriptionRef.get().request(1);
564566
} catch (IOException ignored) {

src/main/java/graphql/servlet/core/GraphQLObjectMapper.java

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import javax.servlet.http.Part;
1717
import java.io.IOException;
1818
import java.io.InputStream;
19+
import java.io.Writer;
1920
import java.util.ArrayList;
2021
import java.util.LinkedHashMap;
2122
import java.util.List;
@@ -101,6 +102,10 @@ public String serializeResultAsJson(ExecutionResult executionResult) {
101102
}
102103
}
103104

105+
public void serializeResultAsJson(Writer writer, ExecutionResult executionResult) throws IOException {
106+
getJacksonMapper().writeValue(writer, createResultFromExecutionResult(executionResult));
107+
}
108+
104109
public boolean areErrorsPresent(ExecutionResult executionResult) {
105110
return graphQLErrorHandlerSupplier.get().errorsPresent(executionResult.getErrors());
106111
}

0 commit comments

Comments
 (0)