From 35bbc604aa1305e7524bd67f38c54110e41ac86e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 15 Mar 2018 14:18:32 +0100 Subject: [PATCH] DATAMONGO-1904 - Fixed handling of nested arrays on reads in MappingMongoConverter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now properly forward the component type information into recursive calls to MappingMongoConverter.readCollectionOrArray(…). --- .../core/convert/MappingMongoConverter.java | 2 +- .../MappingMongoConverterUnitTests.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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 d03349522..7771b12c7 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 @@ -982,7 +982,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } if (dbObjItem instanceof List) { - items.add(readCollectionOrArray(ClassTypeInformation.OBJECT, (List) dbObjItem, path)); + items.add(readCollectionOrArray(componentType, (List) dbObjItem, path)); } else { items.add(getPotentiallyConvertedSimpleRead(dbObjItem, rawComponentType)); } 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 7956dc3a6..26a13827b 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 @@ -1873,6 +1873,19 @@ public class MappingMongoConverterUnitTests { assertThat(result.property).isEqualTo(InterfacedEnum.INSTANCE); } + @Test // DATAMONGO-1904 + public void readsNestedArraysCorrectly() { + + List>> floats = Arrays.asList(Arrays.asList(Arrays.asList(1.0f, 2.0f))); + + org.bson.Document document = new org.bson.Document("nestedFloats", floats); + + WithNestedLists result = converter.read(WithNestedLists.class, document); + + assertThat(result.nestedFloats).hasSize(1); + assertThat(result.nestedFloats).isEqualTo(new float[][][] { { { 1.0f, 2.0f } } }); + } + static class GenericType { T content; } @@ -2247,4 +2260,10 @@ public class MappingMongoConverterUnitTests { static class DocWithInterfacedEnum { SomeInterface property; } + + // DATAMONGO-1904 + + static class WithNestedLists { + float[][][] nestedFloats; + } }