From a603779f33d47cd9ac87919ccc26f8c2d279fa40 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 22 Oct 2021 14:57:12 +0200 Subject: [PATCH] Return previous value in UndertowHeadersAdapter's remove() method Prior to this commit, UndertowHeadersAdapter's remove() method violated the java.util.Map contract by always returning null. This commit fixes this by returning the previous list stored under the specified key, and otherwise returning null if no previous value was present. Closes gh-27592 --- .../http/server/reactive/UndertowHeadersAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java index fa197aa0c2..8b7c6aed14 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java @@ -17,6 +17,7 @@ package org.springframework.http.server.reactive; import java.util.AbstractSet; +import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -36,6 +37,7 @@ import org.springframework.util.MultiValueMap; * {@code MultiValueMap} implementation for wrapping Undertow HTTP headers. * * @author Brian Clozel + * @author Sam Brannen * @since 5.1.1 */ class UndertowHeadersAdapter implements MultiValueMap { @@ -131,7 +133,10 @@ class UndertowHeadersAdapter implements MultiValueMap { @Nullable public List remove(Object key) { if (key instanceof String) { - this.headers.remove((String) key); + Collection removed = this.headers.remove((String) key); + if (removed != null) { + return new ArrayList<>(removed); + } } return null; }