From 52ff6c1547c43df9e015ea68ea150f50d7abf6ca Mon Sep 17 00:00:00 2001 From: agairol Date: Wed, 13 Jun 2018 11:16:58 -0400 Subject: [PATCH] Add support for application/graphql content-type as mentioned in https://graphql.org/learn/serving-over-http/#post-request --- src/main/java/graphql/servlet/GraphQLServlet.java | 7 ++++++- .../graphql/servlet/GraphQLServletSpec.groovy | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/graphql/servlet/GraphQLServlet.java b/src/main/java/graphql/servlet/GraphQLServlet.java index c9e75a38..f3406ae2 100644 --- a/src/main/java/graphql/servlet/GraphQLServlet.java +++ b/src/main/java/graphql/servlet/GraphQLServlet.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.google.common.io.CharStreams; import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.GraphQL; @@ -60,6 +61,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; @@ -128,7 +130,10 @@ public GraphQLServlet(ObjectMapperConfigurer objectMapperConfigurer, List> fileItems = fileUpload.parseParameterMap(request); context.setFiles(Optional.of(fileItems)); diff --git a/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy b/src/test/groovy/graphql/servlet/GraphQLServletSpec.groovy index 5dcd5bc3..f653a21b 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([