Skip to content

Commit 4dc7ac0

Browse files
authored
Merge pull request #224 from sijakubo/set_character_encoding_for_response_of_single_query
Set characterEncoding for the HttpServletResponse of the SingleQueryResponseWriter
2 parents f0bca9f + d18efe3 commit 4dc7ac0

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
import graphql.ExecutionResult;
44
import graphql.kickstart.execution.GraphQLObjectMapper;
5+
import lombok.RequiredArgsConstructor;
6+
57
import java.io.IOException;
68
import java.nio.charset.StandardCharsets;
79
import javax.servlet.http.HttpServletRequest;
810
import javax.servlet.http.HttpServletResponse;
9-
import lombok.RequiredArgsConstructor;
1011

1112
@RequiredArgsConstructor
1213
class SingleQueryResponseWriter implements QueryResponseWriter {
@@ -18,6 +19,7 @@ class SingleQueryResponseWriter implements QueryResponseWriter {
1819
public void write(HttpServletRequest request, HttpServletResponse response) throws IOException {
1920
response.setContentType(HttpRequestHandler.APPLICATION_JSON_UTF8);
2021
response.setStatus(HttpRequestHandler.STATUS_OK);
22+
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
2123
String responseContent = graphQLObjectMapper.serializeResultAsJson(result);
2224
response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length);
2325
response.getWriter().write(responseContent);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package graphql.kickstart.servlet
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper
4+
import graphql.ExecutionResultImpl
5+
import graphql.kickstart.execution.GraphQLObjectMapper
6+
import org.codehaus.groovy.runtime.StringBufferWriter
7+
import spock.lang.Specification
8+
import spock.lang.Unroll
9+
10+
import javax.servlet.http.HttpServletRequest
11+
import javax.servlet.http.HttpServletResponse
12+
13+
class SingleQueryResponseWriterTest extends Specification {
14+
15+
@Unroll
16+
def "should write utf8 results into the response with content #result"() {
17+
given:
18+
def graphQLObjectMapperMock = GraphQLObjectMapper.newBuilder().withObjectMapperProvider({ new ObjectMapper() }).build()
19+
graphQLObjectMapperMock.getJacksonMapper() >> new ObjectMapper()
20+
21+
def requestMock = Mock(HttpServletRequest)
22+
def responseMock = Mock(HttpServletResponse)
23+
24+
def responseContentBuffer = new StringBuffer()
25+
responseMock.getWriter() >> new PrintWriter(new StringBufferWriter(responseContentBuffer))
26+
1 * responseMock.setContentLength(expectedContentLenght)
27+
1 * responseMock.setCharacterEncoding("UTF-8")
28+
29+
expect:
30+
def writer = new SingleQueryResponseWriter(new ExecutionResultImpl(result, []), graphQLObjectMapperMock)
31+
writer.write(requestMock, responseMock)
32+
33+
responseContentBuffer.toString() == expectedResponseContent
34+
35+
where:
36+
result || expectedContentLenght | expectedResponseContent
37+
[testValue: "abcde"] || 30 | """{"data":{"testValue":"abcde"}}"""
38+
[testValue: "äöüüöß"] || 37 | """{"data":{"testValue":"äöüüöß"}}"""
39+
}
40+
}

0 commit comments

Comments
 (0)