Skip to content

Commit f0bca9f

Browse files
authored
Merge pull request #231 from fliptaboada/fix-batched-content-length
fix content length on batched queries
2 parents c0f322a + fa85e2c commit f0bca9f

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import graphql.ExecutionResult;
44
import graphql.kickstart.execution.GraphQLObjectMapper;
55
import java.io.IOException;
6+
import java.nio.charset.StandardCharsets;
67
import java.util.Iterator;
78
import java.util.List;
89
import javax.servlet.http.HttpServletRequest;
@@ -32,7 +33,7 @@ public void write(HttpServletRequest request, HttpServletResponse response) thro
3233
responseBuilder.append(']');
3334

3435
String responseContent = responseBuilder.toString();
35-
response.setContentLength(responseContent.length());
36+
response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length);
3637
response.getWriter().write(responseContent);
3738
}
3839

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.springframework.mock.web.MockHttpServletResponse
1313
import spock.lang.Shared
1414
import spock.lang.Specification
1515

16+
import java.nio.charset.StandardCharsets
1617
import java.util.concurrent.CountDownLatch
1718
import java.util.concurrent.TimeUnit
1819
import java.util.concurrent.atomic.AtomicReference
@@ -108,10 +109,24 @@ class AbstractGraphQLHttpServletSpec extends Specification {
108109
then:
109110
response.getStatus() == STATUS_OK
110111
response.getContentType() == CONTENT_TYPE_JSON_UTF8
111-
response.getContentLength() == mapper.writeValueAsString(["data": ["echo": "test"]]).length()
112+
response.getContentLength() == mapper.writeValueAsString(["data": ["echo": "test"]]).getBytes(StandardCharsets.UTF_8).length
112113
getResponseContent().data.echo == "test"
113114
}
114115

116+
def "query over HTTP GET returns data with correct contentLength"() {
117+
setup:
118+
request.addParameter('query', 'query { echo(arg:"special char á") }')
119+
120+
when:
121+
servlet.doGet(request, response)
122+
123+
then:
124+
response.getStatus() == STATUS_OK
125+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
126+
response.getContentLength() == mapper.writeValueAsString(["data": ["echo": "special char á"]]).getBytes(StandardCharsets.UTF_8).length
127+
getResponseContent().data.echo == "special char á"
128+
}
129+
115130
def "async query over HTTP GET starts async request"() {
116131
setup:
117132
servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env ->
@@ -213,6 +228,21 @@ class AbstractGraphQLHttpServletSpec extends Specification {
213228
getBatchedResponseContent()[1].data.echo == "test"
214229
}
215230

231+
def "batched query over HTTP GET returns data with correct contentLength"() {
232+
setup:
233+
request.addParameter('query', '[{ "query": "query { echo(arg:\\"special char á\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }]')
234+
235+
when:
236+
servlet.doGet(request, response)
237+
238+
then:
239+
response.getStatus() == STATUS_OK
240+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
241+
response.getContentLength() == mapper.writeValueAsString([["data": ["echo": "special char á"]], ["data": ["echo": "test"]]]).getBytes(StandardCharsets.UTF_8).length
242+
getBatchedResponseContent()[0].data.echo == "special char á"
243+
getBatchedResponseContent()[1].data.echo == "test"
244+
}
245+
216246
def "batched query over HTTP GET with variables returns data"() {
217247
setup:
218248
request.addParameter('query', '[{ "query": "query { echo(arg:\\"test\\") }", "variables": { "arg": "test" } }, { "query": "query { echo(arg:\\"test\\") }", "variables": { "arg": "test" } }]')

0 commit comments

Comments
 (0)