diff --git a/src/main/java/graphql/servlet/GraphQLServlet.java b/src/main/java/graphql/servlet/GraphQLServlet.java index 836eed5d..adefc0bc 100644 --- a/src/main/java/graphql/servlet/GraphQLServlet.java +++ b/src/main/java/graphql/servlet/GraphQLServlet.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.google.common.io.ByteStreams; +import com.google.common.io.CharStreams; import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.GraphQL; @@ -43,6 +44,7 @@ public abstract class GraphQLServlet extends HttpServlet implements Servlet, Gra public static final Logger log = LoggerFactory.getLogger(GraphQLServlet.class); public static final String APPLICATION_JSON_UTF8 = "application/json;charset=UTF-8"; + public static final String APPLICATION_GRAPHQL = "application/graphql"; public static final int STATUS_OK = 200; public static final int STATUS_BAD_REQUEST = 400; @@ -114,12 +116,16 @@ public GraphQLServlet(ObjectMapperConfigurer objectMapperConfigurer, List> fileItems = request.getParts().stream() .collect(Collectors.toMap( Part::getName, Collections::singletonList, (l1, l2) -> Stream.concat(l1.stream(), l2.stream()).collect(Collectors.toList()))); + context.setFiles(Optional.of(fileItems)); if (fileItems.containsKey("graphql")) { diff --git a/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy b/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy index 40c64d0a..b2b7fd0a 100644 --- a/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy +++ b/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy @@ -317,6 +317,20 @@ class GraphQLServletSpec extends Specification { getResponseContent().data.echo == "test" } + def "query over HTTP POST body with graphql contentType returns data"() { + setup: + request.addHeader("Content-Type", "application/graphql") + request.setContent('query { echo(arg:"test") }'.getBytes("UTF-8")) + + when: + servlet.doPost(request, response) + + then: + response.getStatus() == STATUS_OK + response.getContentType() == CONTENT_TYPE_JSON_UTF8 + getResponseContent().data.echo == "test" + } + def "query over HTTP POST body with variables returns data"() { setup: request.setContent(mapper.writeValueAsBytes([