Skip to content

Commit ff147e9

Browse files
authored
Merge pull request #411 from graphql-java-kickstart/feature/default-utf8-encoding
Feature/default utf8 encoding
2 parents d606e11 + bb276e1 commit ff147e9

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,10 @@ private GraphQLInvocationInput getGraphQLInvocationInput(
8787
}
8888
});
8989

90-
String query = read(inputStream);
90+
String query = read(inputStream, request.getCharacterEncoding());
9191
if ("query".equals(key) && isSingleQuery(query)) {
92-
GraphQLRequest graphqlRequest = buildRequestFromQuery(query, graphQLObjectMapper, parts);
92+
GraphQLRequest graphqlRequest =
93+
buildRequestFromQuery(query, graphQLObjectMapper, parts, request.getCharacterEncoding());
9394
variablesMap.ifPresent(m -> mapMultipartVariables(graphqlRequest, m, parts));
9495
return invocationInputFactory.create(graphqlRequest, request, response);
9596
} else if (isSingleQuery(query)) {
@@ -109,6 +110,7 @@ private Optional<Part> findPart(Map<String, List<Part>> parts) {
109110
.filter(parts::containsKey)
110111
.map(key -> getPart(parts, key))
111112
.findFirst()
113+
.filter(Optional::isPresent)
112114
.map(Optional::get);
113115
}
114116

@@ -141,33 +143,38 @@ private void mapMultipartVariables(
141143
}
142144

143145
private GraphQLRequest buildRequestFromQuery(
144-
String query, GraphQLObjectMapper graphQLObjectMapper, Map<String, List<Part>> parts)
146+
String query,
147+
GraphQLObjectMapper graphQLObjectMapper,
148+
Map<String, List<Part>> parts,
149+
String charset)
145150
throws IOException {
146151
Map<String, Object> variables = null;
147152
final Optional<Part> variablesItem = getPart(parts, "variables");
148153
if (variablesItem.isPresent()) {
149154
variables =
150-
graphQLObjectMapper.deserializeVariables(read(variablesItem.get().getInputStream()));
155+
graphQLObjectMapper.deserializeVariables(
156+
read(variablesItem.get().getInputStream(), charset));
151157
}
152158

153159
Map<String, Object> extensions = null;
154160
final Optional<Part> extensionsItem = getPart(parts, "extensions");
155161
if (extensionsItem.isPresent()) {
156162
extensions =
157-
graphQLObjectMapper.deserializeExtensions(read(extensionsItem.get().getInputStream()));
163+
graphQLObjectMapper.deserializeExtensions(
164+
read(extensionsItem.get().getInputStream(), charset));
158165
}
159166

160167
String operationName = null;
161168
final Optional<Part> operationNameItem = getPart(parts, "operationName");
162169
if (operationNameItem.isPresent()) {
163-
operationName = read(operationNameItem.get().getInputStream()).trim();
170+
operationName = read(operationNameItem.get().getInputStream(), charset).trim();
164171
}
165172

166173
return new GraphQLRequest(query, variables, extensions, operationName);
167174
}
168175

169-
private String read(InputStream inputStream) throws IOException {
170-
try (InputStreamReader streamReader = new InputStreamReader(inputStream);
176+
private String read(InputStream inputStream, String charset) throws IOException {
177+
try (InputStreamReader streamReader = new InputStreamReader(inputStream, charset);
171178
BufferedReader reader = new BufferedReader(streamReader)) {
172179
return reader.lines().collect(joining());
173180
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory;
1111
import java.io.IOException;
1212
import java.util.List;
13-
import java.util.stream.Collectors;
1413
import javax.servlet.http.HttpServletRequest;
1514
import javax.servlet.http.HttpServletResponse;
1615

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import graphql.GraphQLException;
55
import graphql.kickstart.execution.input.GraphQLInvocationInput;
66
import java.io.IOException;
7+
import java.nio.charset.StandardCharsets;
78
import javax.servlet.http.HttpServletRequest;
89
import javax.servlet.http.HttpServletResponse;
910
import lombok.extern.slf4j.Slf4j;
@@ -32,14 +33,17 @@ public HttpRequestHandlerImpl(
3233
@Override
3334
public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
3435
try {
36+
if (request.getCharacterEncoding() == null) {
37+
request.setCharacterEncoding(StandardCharsets.UTF_8.name());
38+
}
3539
GraphQLInvocationInputParser invocationInputParser =
3640
GraphQLInvocationInputParser.create(
3741
request,
3842
configuration.getInvocationInputFactory(),
3943
configuration.getObjectMapper(),
4044
configuration.getContextSetting());
4145
GraphQLInvocationInput invocationInput =
42-
invocationInputParser.getGraphQLInvocationInput(request, response);
46+
invocationInputParser. getGraphQLInvocationInput(request, response);
4347
requestInvoker.execute(invocationInput, request, response);
4448
} catch (GraphQLException | JsonProcessingException e) {
4549
response.setStatus(STATUS_BAD_REQUEST);

0 commit comments

Comments
 (0)