diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/AbstractMappingContext.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/AbstractMappingContext.java index 5ff86a5af..ac3f3f500 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/AbstractMappingContext.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/AbstractMappingContext.java @@ -252,7 +252,7 @@ public abstract class AbstractMappingContext getComponentTypeRecursively(TypeInformation typeInformation) { + TypeInformation componentType = typeInformation.getComponentType(); + + if (componentType == null) { + return null; + } + + return componentType.isCollectionLike() ? getComponentTypeRecursively(componentType) : componentType; + } private TypeInformation getTypeInformationIfNotSimpleType(TypeInformation information) { return information == null || MappingBeanHelper.isSimpleType(information.getType()) ? null : information; diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BeanWrapper.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BeanWrapper.java index 582a7f52f..3afa6b7c2 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BeanWrapper.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BeanWrapper.java @@ -218,7 +218,7 @@ public class BeanWrapper, T> { private S getPotentiallyConvertedValue(Object source, Class targetType) { boolean conversionServiceAvailable = conversionService != null; - boolean conversionNeeded = source == null || !source.getClass().isAssignableFrom(targetType); + boolean conversionNeeded = source == null || !targetType.isAssignableFrom(source.getClass()); if (conversionServiceAvailable && conversionNeeded) { return conversionService.convert(source, targetType); diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/MappingBeanHelper.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/MappingBeanHelper.java index 8c21897b3..723ce71aa 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/MappingBeanHelper.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/MappingBeanHelper.java @@ -61,6 +61,7 @@ public abstract class MappingBeanHelper { simpleTypes.add(Date.class); simpleTypes.add(Locale.class); simpleTypes.add(Class.class); + simpleTypes.add(Number.class); } /** @@ -80,7 +81,7 @@ public abstract class MappingBeanHelper { */ public static boolean isSimpleType(Class type) { for (Class clazz : simpleTypes) { - if (type == clazz || type.isAssignableFrom(clazz)) { + if (type == clazz || clazz.isAssignableFrom(type)) { return true; } }