Browse Source

DATADOC-221 - Potentially convert values of maps on reading.

pull/1/head
Oliver Gierke 15 years ago
parent
commit
a5fb4872b7
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
  2. 12
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java

@ -788,7 +788,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App
map.put(key, value); map.put(key, value);
} else { } else {
map.put(key, entry.getValue()); map.put(key, getPotentiallyConvertedSimpleRead(entry.getValue(), type.getMapValueType().getType()));
} }
} }

12
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

@ -31,6 +31,7 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.SortedMap; import java.util.SortedMap;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import org.junit.Before; import org.junit.Before;
@ -366,12 +367,14 @@ public class MappingMongoConverterUnitTests {
BigDecimalContainer container = new BigDecimalContainer(); BigDecimalContainer container = new BigDecimalContainer();
container.value = BigDecimal.valueOf(2.5d); container.value = BigDecimal.valueOf(2.5d);
container.map = Collections.singletonMap("foo", container.value);
DBObject dbObject = new BasicDBObject(); DBObject dbObject = new BasicDBObject();
converter.write(container, dbObject); converter.write(container, dbObject);
assertThat(dbObject.get("value"), is(instanceOf(String.class))); assertThat(dbObject.get("value"), is(instanceOf(String.class)));
assertThat((String) dbObject.get("value"), is("2.5")); assertThat((String) dbObject.get("value"), is("2.5"));
assertThat(((DBObject) dbObject.get("map")).get("foo"), is(instanceOf(String.class)));
} }
/** /**
@ -381,9 +384,16 @@ public class MappingMongoConverterUnitTests {
public void readsClassWithBigDecimal() { public void readsClassWithBigDecimal() {
DBObject dbObject = new BasicDBObject("value", "2.5"); DBObject dbObject = new BasicDBObject("value", "2.5");
dbObject.put("map", new BasicDBObject("foo", "2.5"));
BasicDBList list = new BasicDBList();
list.add("2.5");
dbObject.put("collection", list);
BigDecimalContainer result = converter.read(BigDecimalContainer.class, dbObject); BigDecimalContainer result = converter.read(BigDecimalContainer.class, dbObject);
assertThat(result.value, is(BigDecimal.valueOf(2.5d))); assertThat(result.value, is(BigDecimal.valueOf(2.5d)));
assertThat(result.map.get("foo"), is(BigDecimal.valueOf(2.5d)));
assertThat(result.collection.get(0), is(BigDecimal.valueOf(2.5d)));
} }
@Test @Test
@ -502,6 +512,8 @@ public class MappingMongoConverterUnitTests {
class BigDecimalContainer { class BigDecimalContainer {
BigDecimal value; BigDecimal value;
Map<String, BigDecimal> map;
List<BigDecimal> collection;
} }
class CollectionWrapper { class CollectionWrapper {

Loading…
Cancel
Save