From 11baf455d2cc6a5a08ca2b4d3b29714b65b1f4da Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 3 Dec 2019 14:38:19 +0100 Subject: [PATCH] DATAMONGO-2410 - Fix Document to BasicDBObject conversion. Original pull request: #813. --- .../core/convert/MappingMongoConverter.java | 17 +++++++++++++---- .../convert/MappingMongoConverterUnitTests.java | 8 ++++++++ 2 files changed, 21 insertions(+), 4 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 13f4e1cd5..2d76358be 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 @@ -211,12 +211,21 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return conversionService.convert(bson, rawType); } - if (DBObject.class.isAssignableFrom(rawType)) { + if (Document.class.isAssignableFrom(rawType)) { return (S) bson; } - if (Document.class.isAssignableFrom(rawType)) { - return (S) bson; + if (DBObject.class.isAssignableFrom(rawType)) { + + if (bson instanceof DBObject) { + return (S) bson; + } + + if (bson instanceof Document) { + return (S) new BasicDBObject((Document) bson); + } + + return (S) DBObject.class.cast(bson); } if (typeToUse.isCollectionLike() && bson instanceof List) { @@ -1648,7 +1657,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App /** * Returns whether the given type is a sub type of the given reference, i.e. assignable but not the exact same type. - * + * * @param type must not be {@literal null}. * @param reference must not be {@literal null}. * @return 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 3479f94ae..8aa25bd94 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 @@ -84,6 +84,7 @@ import org.springframework.data.util.ClassTypeInformation; import org.springframework.test.util.ReflectionTestUtils; import com.mongodb.BasicDBList; +import com.mongodb.BasicDBObject; import com.mongodb.DBRef; /** @@ -1926,6 +1927,13 @@ public class MappingMongoConverterUnitTests { assertThat(order.items).hasSize(3); } + @Test // DATAMONGO-2410 + public void shouldAllowReadingBackDbObject() { + + assertThat(converter.read(BasicDBObject.class, new org.bson.Document("property", "value"))) + .isEqualTo(new BasicDBObject("property", "value")); + } + static class GenericType { T content; }