From 5477ab20b2fbe999074da20fd4ee3cb42dbf3ba0 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 24 Nov 2011 12:59:47 +0100 Subject: [PATCH] DATAMONGO-324 - Added shortcut in MappingMongoConverter to allow reading DBObjects without conversion. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added check in MappingMongoConverter.read(…) to shortcut object conversion if the requested type is DBObject. --- .../core/convert/MappingMongoConverter.java | 4 +++ .../MappingMongoConverterUnitTests.java | 36 ++++++++++++++++++- 2 files changed, 39 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 e198d8877..52615fea7 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 @@ -182,6 +182,10 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App if (conversions.hasCustomReadTarget(dbo.getClass(), rawType)) { return conversionService.convert(dbo, rawType); } + + if (DBObject.class.isAssignableFrom(rawType)) { + return (S) dbo; + } if (typeToUse.isCollectionLike() && dbo instanceof BasicDBList) { return (S) readCollectionOrArray(typeToUse, (BasicDBList) dbo); 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 71352c8ad..e9a2e5ff2 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 @@ -764,7 +764,7 @@ public class MappingMongoConverterUnitTests { * @see DATAMONGO-309 */ @Test - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({ "unchecked" }) public void writesArraysAsMapValuesCorrectly() { ClassWithMapProperty wrapper = new ClassWithMapProperty(); @@ -786,6 +786,39 @@ public class MappingMongoConverterUnitTests { assertThat(list, hasItem((Object) "bar")); } + /** + * @see DATAMONGO-324 + */ + @Test + public void writesDbObjectCorrectly() { + + DBObject dbObject = new BasicDBObject(); + dbObject.put("foo", "bar"); + + DBObject result = new BasicDBObject(); + + converter.write(dbObject, result); + + result.removeField(DefaultMongoTypeMapper.DEFAULT_TYPE_KEY); + assertThat(dbObject, is(result)); + } + + /** + * @see DATAMONGO-324 + */ + @Test + public void readsDbObjectCorrectly() { + + DBObject dbObject = new BasicDBObject(); + dbObject.put("foo", "bar"); + + DBObject result = converter.read(DBObject.class, dbObject); + + assertThat(result, is(dbObject)); + } + + + class GenericType { T content; } @@ -817,6 +850,7 @@ public class MappingMongoConverterUnitTests { String city; } + interface Contact { }