diff --git a/spring-core/src/main/java/org/springframework/util/CollectionUtils.java b/spring-core/src/main/java/org/springframework/util/CollectionUtils.java index 1f931b9285f1..d1e9354abda9 100644 --- a/spring-core/src/main/java/org/springframework/util/CollectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/CollectionUtils.java @@ -457,7 +457,6 @@ public static Iterator toIterator(@Nullable Enumeration enumeration) { * @since 3.1 */ public static MultiValueMap toMultiValueMap(Map> targetMap) { - Assert.notNull(targetMap, "'targetMap' must not be null"); return new MultiValueMapAdapter<>(targetMap); } diff --git a/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java b/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java index 11c7970b33d6..8faf71ea1ce0 100644 --- a/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java +++ b/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java @@ -35,7 +35,8 @@ * @param the key type * @param the value element type */ -public class LinkedMultiValueMap extends MultiValueMapAdapter implements Serializable, Cloneable { +public class LinkedMultiValueMap extends MultiValueMapAdapter // new public base class in 5.3 + implements Serializable, Cloneable { private static final long serialVersionUID = 3801124242820219131L; diff --git a/spring-core/src/main/java/org/springframework/util/MultiValueMapAdapter.java b/spring-core/src/main/java/org/springframework/util/MultiValueMapAdapter.java index c5f0ab33b08b..0d51b56117c8 100644 --- a/spring-core/src/main/java/org/springframework/util/MultiValueMapAdapter.java +++ b/spring-core/src/main/java/org/springframework/util/MultiValueMapAdapter.java @@ -30,23 +30,30 @@ * * @author Arjen Poutsma * @author Juergen Hoeller - * @since 3.1 + * @since 5.3 * @param the key type * @param the value element type * @see CollectionUtils#toMultiValueMap * @see LinkedMultiValueMap */ @SuppressWarnings("serial") -class MultiValueMapAdapter implements MultiValueMap, Serializable { +public class MultiValueMapAdapter implements MultiValueMap, Serializable { private final Map> targetMap; - MultiValueMapAdapter(Map> targetMap) { + /** + * Wrap the given target {@link Map} as a {@link MultiValueMap} adapter. + * @param targetMap the plain target {@code Map} + */ + public MultiValueMapAdapter(Map> targetMap) { + Assert.notNull(targetMap, "'targetMap' must not be null"); this.targetMap = targetMap; } + // MultiValueMap implementation + @Override @Nullable public V getFirst(K key) { @@ -96,6 +103,9 @@ public Map toSingleValueMap() { return singleValueMap; } + + // Map implementation + @Override public int size() { return this.targetMap.size();