Skip to content

Commit 8ec0c21

Browse files
committed
MockMvc handles param without values
Closes gh-35210
1 parent 9f9b33c commit 8ec0c21

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,10 @@ public B headers(HttpHeaders httpHeaders) {
372372
* @param values one or more values
373373
*/
374374
public B param(String name, String... values) {
375+
if (values.length == 0) {
376+
this.parameters.computeIfAbsent(name, k -> new ArrayList<>());
377+
return self();
378+
}
375379
addToMultiValueMap(this.parameters, name, values);
376380
return self();
377381
}
@@ -821,11 +825,8 @@ public final MockHttpServletRequest buildRequest(ServletContext servletContext)
821825
}
822826
addRequestParams(request, UriComponentsBuilder.fromUri(uri).build().getQueryParams());
823827

824-
this.parameters.forEach((name, values) -> {
825-
for (String value : values) {
826-
request.addParameter(name, value);
827-
}
828-
});
828+
this.parameters.forEach((name, values) ->
829+
request.setParameter(name, values.toArray(new String[0])));
829830

830831
if (!this.formFields.isEmpty()) {
831832
if (this.content != null && this.content.length > 0) {

spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,16 @@ void queryParameter() {
263263
assertThat(request.getQueryString()).isEqualTo("foo=bar&foo=baz");
264264
}
265265

266+
@Test // gh-35210
267+
void queryParameterWithoutValues() {
268+
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");
269+
this.builder.queryParam("foo");
270+
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
271+
272+
assertThat(request.getQueryString()).isEqualTo("foo");
273+
assertThat(request.getParameterMap().get("foo")).containsExactly();
274+
}
275+
266276
@Test
267277
void queryParameterMap() {
268278
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");

0 commit comments

Comments
 (0)