From fd7e41b7536f683f9bfa7b8fe6d492a4653ee091 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 28 Jul 2011 11:17:47 +0200 Subject: [PATCH] DATADOC-228 - MappingMongoConverter now writes null for map values. Fixes a NPE that one got when trying to persist a Map containing null as value for entries. --- .../core/convert/MappingMongoConverter.java | 2 +- .../convert/MappingMongoConverterUnitTests.java | 17 +++++++++++++++++ 2 files changed, 18 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 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; }