diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 85b554ca3..d03349522 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -954,7 +954,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App : CollectionFactory.createCollection(collectionType, rawComponentType, sourceValue.size()); if (sourceValue.isEmpty()) { - return getPotentiallyConvertedSimpleRead(items, collectionType); + return getPotentiallyConvertedSimpleRead(items, targetType.getType()); } if (!DBRef.class.equals(rawComponentType) && isCollectionOfDbRefWhereBulkFetchIsPossible(sourceValue)) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index 81cc77a7f..90ab333d2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -21,6 +21,8 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.DocumentTestUtils.*; +import lombok.RequiredArgsConstructor; + import java.math.BigDecimal; import java.math.BigInteger; import java.net.URL; @@ -1803,6 +1805,22 @@ public class MappingMongoConverterUnitTests { converter.read(TypeWithMapOfLongValues.class, source); } + @Test // DATAMONGO-1831 + public void shouldConvertArrayInConstructorCorrectly() { + + org.bson.Document source = new org.bson.Document("array", Collections.emptyList()); + + assertThat(converter.read(WithArrayInConstructor.class, source).array, is(emptyArray())); + } + + @Test // DATAMONGO-1831 + public void shouldConvertNullForArrayInConstructorCorrectly() { + + org.bson.Document source = new org.bson.Document(); + + assertThat(converter.read(WithArrayInConstructor.class, source).array, is(nullValue())); + } + static class GenericType { T content; } @@ -2157,4 +2175,11 @@ public class MappingMongoConverterUnitTests { static class TypeWithMapOfLongValues { Map map; } + + @RequiredArgsConstructor + static class WithArrayInConstructor { + + final String[] array; + + } }