From ba8f28f623ea53b35d88359861ce743a6f1e907a Mon Sep 17 00:00:00 2001 From: Heesu Jung Date: Wed, 12 Jun 2019 14:52:43 +0900 Subject: [PATCH] DATAMONGO-2300 - Add check rawType is null in readMap. Original Pull Request: #763 --- .../core/convert/MappingMongoConverter.java | 3 ++- .../MappingMongoConverterUnitTests.java | 19 +++++++++++++++++++ 2 files changed, 21 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 cf1dc5f66..426bb0a9f 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 @@ -90,6 +90,7 @@ import com.mongodb.DBRef; * @author Christoph Strobl * @author Jordi Llach * @author Mark Paluch + * @author Heesu Jung */ public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware { @@ -1170,7 +1171,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App map.put(key, read(defaultedValueType, (BasicDBObject) value, path)); } else if (value instanceof DBRef) { map.put(key, DBRef.class.equals(rawValueType) ? value - : readAndConvertDBRef((DBRef) value, defaultedValueType, ObjectPath.ROOT, rawValueType)); + : readAndConvertDBRef((DBRef) value, defaultedValueType, ObjectPath.ROOT, rawValueType != null ? rawValueType : ClassTypeInformation.OBJECT.getType())); } else if (value instanceof List) { map.put(key, readCollectionOrArray(valueType != null ? valueType : ClassTypeInformation.LIST, (List) value, path)); 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 b889bdf36..c4820fdce 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 @@ -75,6 +75,7 @@ import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.core.mapping.PersonPojoStringId; import org.springframework.data.mongodb.core.mapping.TextScore; import org.springframework.data.util.ClassTypeInformation; +import org.springframework.data.util.TypeInformation; import org.springframework.test.util.ReflectionTestUtils; import com.mongodb.BasicDBList; @@ -88,6 +89,7 @@ import com.mongodb.DBRef; * @author Patrik Wasik * @author Christoph Strobl * @author Mark Paluch + * @author Heesu Jung */ @RunWith(MockitoJUnitRunner.class) public class MappingMongoConverterUnitTests { @@ -2078,6 +2080,23 @@ public class MappingMongoConverterUnitTests { .isEqualTo(new BasicDBObject("property", "value")); } + @Test // DATAMONGO-2300 + public void readAndConvertDBRefNestedByMapCorrectly() { + + org.bson.Document cluster = new org.bson.Document("_id", 100L); + DBRef dbRef = new DBRef("clusters", 100L); + + org.bson.Document data = new org.bson.Document("_id", 3L); + data.append("cluster", dbRef); + + MappingMongoConverter spyConverter = spy(converter); + Mockito.doReturn(cluster).when(spyConverter).readRef(dbRef); + + Map result = spyConverter.readMap(ClassTypeInformation.MAP, data, ObjectPath.ROOT); + + assertThat(((LinkedHashMap) result.get("cluster")).get("_id")).isEqualTo(100L); + } + static class GenericType { T content; }