diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java index 49911ad60..50b1d4c45 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java @@ -306,7 +306,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return instance; } - public void write(final Object obj, final DBObject dbo) { + @SuppressWarnings("unchecked") + public void write(final Object obj, final DBObject dbo) { if (null == obj) { return; } @@ -318,6 +319,11 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App dbo.putAll(result); return; } + + if (Map.class.isAssignableFrom(obj.getClass())) { + writeMapInternal((Map) obj, dbo); + return; + } PersistentEntity entity = mappingContext.getPersistentEntity(obj.getClass()); write(obj, dbo, entity); @@ -508,7 +514,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App Object key = entry.getKey(); Object val = entry.getValue(); if (isSimpleType(key.getClass())) { - String simpleKey = conversionService.convert(key, String.class); + // Don't use conversion service here as removal of ObjectToString converter results in some primitive types not + // being convertable + String simpleKey = key.toString(); if (isSimpleType(val.getClass())) { dbo.put(simpleKey, val); } else { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java index 83b43115c..88443700f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java @@ -20,8 +20,12 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; +import java.util.Map; + import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; @@ -90,7 +94,20 @@ public class MappingMongoConverterUnitTests { Person result = converter.read(Person.class, dbObject); assertThat(result.birthDate, is(notNullValue())); } - + + /** + * @see DATADOC-130 + */ + @Test + public void convertsMapTypeCorrectly() { + + Map map = Collections.singletonMap(Locale.US, "Foo"); + + BasicDBObject dbObject = new BasicDBObject(); + converter.write(map, dbObject); + + assertThat(dbObject.get(Locale.US.toString()).toString(), is("Foo")); + } public static class Address { String street;