Browse Source

UriComponentsBuilder copies query params through MultiValueMap.addAll

Issue: SPR-17256
pull/1955/head
Juergen Hoeller 7 years ago
parent
commit
c06b9525ac
  1. 8
      spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java
  2. 2
      spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  3. 7
      spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

8
spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java

@ -119,7 +119,6 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa @@ -119,7 +119,6 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa
public Map<K, V> toSingleValueMap() {
LinkedHashMap<K, V> singleValueMap = new LinkedHashMap<>(this.targetMap.size());
this.targetMap.forEach((key, value) -> singleValueMap.put(key, value.get(0)));
return singleValueMap;
}
@ -193,7 +192,10 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa @@ -193,7 +192,10 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa
/**
* Create a deep copy of this Map.
* @return a copy of this Map, including a copy of each value-holding List entry
* (consistently using an independent modifiable {@link LinkedList} for each entry)
* along the lines of {@code MultiValueMap.addAll} semantics
* @since 4.2
* @see #addAll(MultiValueMap)
* @see #clone()
*/
public LinkedMultiValueMap<K, V> deepCopy() {
@ -205,7 +207,11 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa @@ -205,7 +207,11 @@ public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializa
/**
* Create a regular copy of this Map.
* @return a shallow copy of this Map, reusing this Map's value-holding List entries
* (even if some entries are shared or unmodifiable) along the lines of standard
* {@code Map.put} semantics
* @since 4.2
* @see #put(Object, List)
* @see #putAll(Map)
* @see LinkedMultiValueMap#LinkedMultiValueMap(Map)
* @see #deepCopy()
*/

2
spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java

@ -705,7 +705,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { @@ -705,7 +705,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@Override
public UriComponentsBuilder queryParams(@Nullable MultiValueMap<String, String> params) {
if (params != null) {
this.queryParams.putAll(params);
this.queryParams.addAll(params);
}
return this;
}

7
spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

@ -922,4 +922,11 @@ public class UriComponentsBuilderTests { @@ -922,4 +922,11 @@ public class UriComponentsBuilderTests {
assertNotEquals(uri1, uri2);
}
@Test // SPR-17256
public void uriComponentsWithQueryParamClone() {
UriComponentsBuilder.fromUriString("http://localhost:8081")
.uriComponents(UriComponentsBuilder.fromUriString("/{path}?sort={sort}").build())
.queryParam("sort", "another_value").build();
}
}

Loading…
Cancel
Save