diff --git a/spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java b/spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java index a916f1d856..4689d53ee1 100644 --- a/spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java +++ b/spring-core/src/main/java/org/springframework/util/LinkedCaseInsensitiveMap.java @@ -227,7 +227,13 @@ public class LinkedCaseInsensitiveMap implements Map, Serializable public V computeIfAbsent(String key, Function mappingFunction) { String oldKey = this.caseInsensitiveKeys.putIfAbsent(convertKey(key), key); if (oldKey != null) { - return this.targetMap.get(oldKey); + V oldKeyValue = this.targetMap.get(oldKey); + if (oldKeyValue != null) { + return oldKeyValue; + } + else { + key = oldKey; + } } return this.targetMap.computeIfAbsent(key, mappingFunction); } diff --git a/spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java b/spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java index f006b0baae..9f50d9d1e9 100644 --- a/spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java +++ b/spring-core/src/test/java/org/springframework/util/LinkedCaseInsensitiveMapTests.java @@ -102,6 +102,8 @@ class LinkedCaseInsensitiveMapTests { assertThat(map.put("null", null)).isNull(); assertThat(map.putIfAbsent("NULL", "value")).isNull(); + assertThat(map.put("null", null)).isEqualTo("value"); + assertThat(map.computeIfAbsent("NULL", s -> "value")).isEqualTo("value"); assertThat(map.get("null")).isEqualTo("value"); }