Skip to content

Commit 4a55491

Browse files
committed
Merge pull request #1034 from config25
* gh-1034: Fix URL decoding charset mismatch in MockMvcRequestConverter Closes gh-1034
2 parents dc95a0f + adffb9a commit 4a55491

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

spring-restdocs-mockmvc/src/main/java/org/springframework/restdocs/mockmvc/MockMvcRequestConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ private static void processParameter(String parameter, MultiValueMap<String, Str
280280
}
281281

282282
private static String decode(String encoded) {
283-
return URLDecoder.decode(encoded, StandardCharsets.US_ASCII);
283+
return URLDecoder.decode(encoded, StandardCharsets.UTF_8);
284284
}
285285

286286
}

spring-restdocs-mockmvc/src/test/java/org/springframework/restdocs/mockmvc/MockMvcRequestConverterTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,17 @@ public void postRequestWithParametersAndQueryStringCreatesFormUrlEncodedContentW
158158
assertThat(request.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_FORM_URLENCODED);
159159
}
160160

161+
@Test
162+
public void postRequestWithNonAsciiParametersAndQueryStringCreatesFormUrlEncodedContentWithoutDuplication() {
163+
OperationRequest request = createOperationRequest(MockMvcRequestBuilders.post("/foo?name=\uD64D\uAE38\uB3D9")
164+
.param("name", "\uD64D\uAE38\uB3D9")
165+
.param("other", "\uD64D\uAE38\uB3D9"));
166+
assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo?name=%ED%99%8D%EA%B8%B8%EB%8F%99"));
167+
assertThat(request.getMethod()).isEqualTo(HttpMethod.POST);
168+
assertThat(request.getContentAsString()).isEqualTo("other=%ED%99%8D%EA%B8%B8%EB%8F%99");
169+
assertThat(request.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_FORM_URLENCODED);
170+
}
171+
161172
@Test
162173
public void mockMultipartFileUpload() {
163174
OperationRequest request = createOperationRequest(MockMvcRequestBuilders.multipart("/foo")

0 commit comments

Comments
 (0)