mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-10-08 16:19:48 +00:00
Preserve parameter order in DefaultServerRequest's ServletParametersMap
Prior to this commit, DefaultServerRequest's ServletParametersMap lost the original parameter order when entrySet() was invoked. To address that, this commit revises ServletParametersMap.entrySet() so that it stores the results in a LinkedHashSet, thereby retaining the original order. Closes gh-36966
This commit is contained in:
+2
-1
@@ -33,6 +33,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@@ -443,7 +444,7 @@ class DefaultServerRequest implements ServerRequest {
|
||||
List<String> value = Arrays.asList(entry.getValue());
|
||||
return new SimpleImmutableEntry<>(entry.getKey(), value);
|
||||
})
|
||||
.collect(Collectors.toSet());
|
||||
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+14
@@ -167,6 +167,20 @@ class DefaultServerRequestTests {
|
||||
assertThat(request.param("foo")).contains("bar");
|
||||
}
|
||||
|
||||
@Test // gh-36966
|
||||
void paramsEntrySetPreservesOrder() {
|
||||
MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true);
|
||||
servletRequest.setParameter("charlie", "3");
|
||||
servletRequest.setParameter("alpha", "1");
|
||||
servletRequest.setParameter("bravo", "2");
|
||||
|
||||
DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters);
|
||||
|
||||
assertThat(request.params().entrySet())
|
||||
.extracting(Map.Entry::getKey)
|
||||
.containsExactly("charlie", "alpha", "bravo");
|
||||
}
|
||||
|
||||
@Test
|
||||
void multipartData() throws Exception {
|
||||
MockPart formPart = new MockPart("form", "foo".getBytes(UTF_8));
|
||||
|
||||
Reference in New Issue
Block a user