From 4d309bd7f046cb897a972987f3984f3bfe0d68f9 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 13 Jul 2018 11:01:21 +0200 Subject: [PATCH] DATAMONGO-2011 - Relax type check when mapping collections. Original pull request: #587. --- .../data/mongodb/core/convert/MappingMongoConverter.java | 3 +-- .../core/convert/MappingMongoConverterUnitTests.java | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) 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 8be514b85..571198f0f 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 @@ -980,13 +980,12 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App items.add(read(componentType, (BasicDBObject) element, path)); } else { - if (element instanceof Collection) { + if (!Object.class.equals(rawComponentType) && element instanceof Collection) { if (!rawComponentType.isArray() && !ClassUtils.isAssignable(Iterable.class, rawComponentType)) { throw new MappingException( String.format(INCOMPATIBLE_TYPES, element, element.getClass(), rawComponentType, path)); } } - if (element instanceof List) { items.add(readCollectionOrArray(componentType, (Collection) element, path)); } else { 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 26a13827b..deadf8ae2 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 @@ -1886,6 +1886,15 @@ public class MappingMongoConverterUnitTests { assertThat(result.nestedFloats).isEqualTo(new float[][][] { { { 1.0f, 2.0f } } }); } + @Test // DATAMONGO-2011 + public void readsNestedListsToObjectCorrectly() { + + List values = Arrays.asList("ONE", "TWO"); + org.bson.Document source = new org.bson.Document("value", Collections.singletonList(values)); + + assertThat(converter.read(Attribute.class, source).value).isInstanceOf(List.class); + } + static class GenericType { T content; }