From 8b7521a93b8aa6eccc797962fae91e313fe06d87 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 7 Sep 2011 10:25:44 +0200 Subject: [PATCH] DATADOC-268 - CustomConversion considers types only simple for registered write converters. In cases where only a reading converter is registered (e.g. to manually instantiate the object instance) the type the reading converter is registered for must not be regarded as simple as it will be written to the DBObject as is. --- .../data/mongodb/core/convert/CustomConversions.java | 5 +++-- .../core/convert/CustomConversionsUnitTests.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java index 139a40622..01376f3f8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java @@ -104,8 +104,10 @@ public class CustomConversions { } /** - * Returns whether the given type is considered to be simple. + * Returns whether the given type is considered to be simple. That means it's either a general simple type or we have + * a writing {@link Converter} registered for a particular type. * + * @see SimpleTypeHolder#isSimpleType(Class) * @param type * @return */ @@ -176,7 +178,6 @@ public class CustomConversions { if (isMongoBasicType(pair.getSourceType())) { readingPairs.add(pair); - customSimpleTypes.add(pair.getTargetType()); } if (isMongoBasicType(pair.getTargetType())) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java index 7c55017af..c521f05e3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java @@ -50,7 +50,7 @@ public class CustomConversionsUnitTests { @Test public void considersTypesWeRegisteredConvertersForAsSimple() { - CustomConversions conversions = new CustomConversions( Arrays.asList(UuidToStringConverter.INSTANCE)); + CustomConversions conversions = new CustomConversions(Arrays.asList(UuidToStringConverter.INSTANCE)); assertThat(conversions.isSimpleType(UUID.class), is(true)); } @@ -105,6 +105,15 @@ public class CustomConversionsUnitTests { assertThat(conversionService.canConvert(String.class, UUID.class), is(true)); } + /** + * @see DATADOC-259 + */ + @Test + public void doesNotConsiderTypeSimpleIfOnlyReadConverterIsRegistered() { + CustomConversions conversions = new CustomConversions(Arrays.asList(StringToUUIDConverter.INSTANCE)); + assertThat(conversions.isSimpleType(UUID.class), is(false)); + } + enum UuidToStringConverter implements Converter { INSTANCE;