diff --git a/src/main/java/org/springframework/data/convert/CustomConversions.java b/src/main/java/org/springframework/data/convert/CustomConversions.java index 25023bffc..2321e9b9e 100644 --- a/src/main/java/org/springframework/data/convert/CustomConversions.java +++ b/src/main/java/org/springframework/data/convert/CustomConversions.java @@ -393,7 +393,10 @@ public class CustomConversions { public Class computeIfAbsent(Class sourceType, Class targetType, Function> mappingFunction) { - TargetTypes targetTypes = customReadTargetTypes.computeIfAbsent(sourceType, TargetTypes::new); + TargetTypes targetTypes = customReadTargetTypes.get(sourceType); + if (targetTypes == null) { + targetTypes = customReadTargetTypes.computeIfAbsent(sourceType, TargetTypes::new); + } return targetTypes.computeIfAbsent(targetType, mappingFunction); } diff --git a/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java b/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java index 2a59aea09..8065323ff 100644 --- a/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java +++ b/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java @@ -127,7 +127,14 @@ public class DefaultTypeMapper implements TypeMapper { */ @Nullable private TypeInformation getFromCacheOrCreate(Alias alias) { - return typeCache.computeIfAbsent(alias, getAlias).orElse(null); + + Optional> typeInformation = typeCache.get(alias); + + if (typeInformation == null) { + typeInformation = typeCache.computeIfAbsent(alias, getAlias); + } + + return typeInformation.orElse(null); } /*