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 1721bd0d8..bc882d1a2 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 @@ -239,12 +239,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) { @@ -273,9 +282,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App if (codecRegistryProvider != null) { Optional> codec = codecRegistryProvider.getCodecFor(rawType); - if(codec.isPresent()) { - return codec.get().decode(new JsonReader(target.toJson()), - DecoderContext.builder().build()); + if (codec.isPresent()) { + return codec.get().decode(new JsonReader(target.toJson()), DecoderContext.builder().build()); } } 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 b0567b77a..da45e72e0 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 @@ -77,6 +77,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; /** @@ -2067,6 +2068,13 @@ public class MappingMongoConverterUnitTests { assertThat(target.dateAsObjectId).isEqualTo(new Date(reference.getTimestamp())); } + @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; }