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 3e39e8af2..c350e0b74 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 @@ -568,7 +568,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App // Don't use conversion service here as removal of ObjectToString converter results in some primitive types not // being convertable String simpleKey = key.toString(); - if (conversions.isSimpleType(val.getClass())) { + if (val == null || conversions.isSimpleType(val.getClass())) { writeSimpleInternal(simpleKey, val, dbo); } else { DBObject newDbo = new BasicDBObject(); 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 154d0c347..1781f5e0d 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 @@ -491,6 +491,23 @@ public class MappingMongoConverterUnitTests { } + /** + * @see DATADOC-228 + */ + @Test + public void writesNullValuesForMaps() { + + ClassWithMapProperty foo = new ClassWithMapProperty(); + foo.map = Collections.singletonMap(Locale.US, null); + + DBObject result = new BasicDBObject(); + converter.write(foo, result); + + Object map = result.get("map"); + assertThat(map, is(instanceOf(DBObject.class))); + assertThat(((DBObject) map).keySet(), hasItem("en_US")); + } + class GenericType { T content; }