Skip to content

Commit 2d3eeed

Browse files
committed
DATAMONGO-1102 - Added support for Java 8 date/time types.
We're now able to persist and read non-time-zoned JDK 8 date/time types (LocalDate, LocalTime, LocalDateTime) to and from Date instances.
1 parent b22eb6f commit 2d3eeed

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
3737
import org.springframework.core.convert.support.GenericConversionService;
3838
import org.springframework.data.convert.JodaTimeConverters;
39+
import org.springframework.data.convert.Jsr310Converters;
3940
import org.springframework.data.convert.ReadingConverter;
4041
import org.springframework.data.convert.WritingConverter;
4142
import org.springframework.data.mapping.model.SimpleTypeHolder;
@@ -112,6 +113,7 @@ public CustomConversions(List<?> converters) {
112113

113114
toRegister.addAll(JodaTimeConverters.getConvertersToRegister());
114115
toRegister.addAll(GeoConverters.getConvertersToRegister());
116+
toRegister.addAll(Jsr310Converters.getConvertersToRegister());
115117

116118
for (Object c : toRegister) {
117119
registerConversion(c);

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.math.BigDecimal;
2424
import java.math.BigInteger;
2525
import java.net.URL;
26+
import java.time.LocalDateTime;
2627
import java.util.ArrayList;
2728
import java.util.Arrays;
2829
import java.util.Collection;
@@ -1945,6 +1946,22 @@ public void annotatedIdFieldShouldExtractValueFromUnderscoreIdField() {
19451946
assertThat(withAnnotatedIdField.key, is("A"));
19461947
}
19471948

1949+
/**
1950+
* @see DATAMONGO-1102
1951+
*/
1952+
@Test
1953+
public void convertsJava8DateTimeTypesToDateAndBack() {
1954+
1955+
TypeWithLocalDateTime source = new TypeWithLocalDateTime();
1956+
LocalDateTime reference = source.date;
1957+
BasicDBObject result = new BasicDBObject();
1958+
1959+
converter.write(source, result);
1960+
1961+
assertThat(result.get("date"), is(instanceOf(Date.class)));
1962+
assertThat(converter.read(TypeWithLocalDateTime.class, result).date, is(reference));
1963+
}
1964+
19481965
static class GenericType<T> {
19491966
T content;
19501967
}
@@ -2232,4 +2249,13 @@ static class ClassWithAnnotatedIdField {
22322249

22332250
@Id String key;
22342251
}
2252+
2253+
static class TypeWithLocalDateTime {
2254+
2255+
LocalDateTime date;
2256+
2257+
TypeWithLocalDateTime() {
2258+
this.date = LocalDateTime.now();
2259+
}
2260+
}
22352261
}

0 commit comments

Comments
 (0)