Skip to content

Commit 03c2fc0

Browse files
committed
fix: support poorly formatted graphql queries fixes #385
1 parent bf7130c commit 03c2fc0

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
1111
import java.io.IOException;
1212
import java.util.List;
13+
import java.util.stream.Collectors;
1314
import javax.servlet.http.HttpServletRequest;
1415
import javax.servlet.http.HttpServletResponse;
1516

@@ -27,12 +28,12 @@ class GraphQLPostInvocationInputParser extends AbstractGraphQLInvocationInputPar
2728
public GraphQLInvocationInput getGraphQLInvocationInput(
2829
HttpServletRequest request, HttpServletResponse response) throws IOException {
2930
if (APPLICATION_GRAPHQL.equals(request.getContentType())) {
30-
String query = request.getReader().lines().collect(joining());
31+
String query = request.getReader().lines().collect(joining(" "));
3132
GraphQLRequest graphqlRequest = GraphQLRequest.createQueryOnlyRequest(query);
3233
return invocationInputFactory.create(graphqlRequest, request, response);
3334
}
3435

35-
String body = request.getReader().lines().collect(joining());
36+
String body = request.getReader().lines().collect(joining(" "));
3637
if (isSingleQuery(body)) {
3738
GraphQLRequest graphqlRequest = graphQLObjectMapper.readGraphQLRequest(body);
3839
return invocationInputFactory.create(graphqlRequest, request, response);

graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy

+19
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,25 @@ class AbstractGraphQLHttpServletSpec extends Specification {
422422
getResponseContent().data.echo == "test"
423423
}
424424

425+
def "query over HTTP POST multiline body returns data"() {
426+
setup:
427+
request.setContent("""
428+
query { object {
429+
a
430+
b
431+
} }""".bytes)
432+
request.setMethod("POST")
433+
request.contentType = "application/graphql"
434+
435+
when:
436+
servlet.doPost(request, response)
437+
438+
then:
439+
response.getStatus() == STATUS_OK
440+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
441+
getResponseContent().data.object.b == null
442+
}
443+
425444
def "disabling async support on request over HTTP POST does not start async request"() {
426445
setup:
427446
servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env ->

0 commit comments

Comments
 (0)