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 d11768e04..2fa85870b 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 @@ -724,7 +724,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App Assert.notNull(dbObject); Class customMapType = findTypeToBeUsed(dbObject); - Class mapType = customMapType == null ? Map.class : customMapType; + Class mapType = customMapType == null ? type.getType() : customMapType; Map map = CollectionFactory.createMap(mapType, dbObject.keySet().size()); Map sourceMap = dbObject.toMap(); 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 596fd9026..c38b4c37d 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 @@ -30,7 +30,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; - +import java.util.SortedMap; import org.bson.types.ObjectId; import org.joda.time.LocalDate; import org.junit.Before; @@ -396,6 +396,21 @@ public class MappingMongoConverterUnitTests { assertThat(dbo2.get("_id"), is(ObjectId.class)); } + /** + * @see DATADOC-207 + */ + @Test + public void convertsCustomEmptyMapCorrectly() { + + DBObject map = new BasicDBObject(); + DBObject wrapper = new BasicDBObject("map", map); + + ClassWithSortedMap result = converter.read(ClassWithSortedMap.class, wrapper); + + assertThat(result, is(ClassWithSortedMap.class)); + assertThat(result.map, is(SortedMap.class)); + } + class ClassWithEnumProperty { @@ -424,6 +439,10 @@ public class MappingMongoConverterUnitTests { Set
addresses; } + class ClassWithSortedMap { + SortedMap map; + } + class ClassWithMapProperty { Map map; }