diff --git a/pom.xml b/pom.xml
index 018dd48e27..7033ac0f25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4390-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 2de4b6b635..1d6b8ab9a2 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4390-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 3bc1ab9df2..5533ad93eb 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4390-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 921254ca44..6fa47cca1d 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4390-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java
index a0c1cbccbf..3b38d99b6f 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java
@@ -41,6 +41,7 @@
import org.springframework.data.convert.PropertyValueConverter;
import org.springframework.data.convert.PropertyValueConverterFactory;
import org.springframework.data.convert.PropertyValueConverterRegistrar;
+import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.SimplePropertyValueConversions;
import org.springframework.data.convert.WritingConverter;
import org.springframework.data.mapping.model.SimpleTypeHolder;
@@ -361,6 +362,7 @@ ConverterConfiguration createConverterConfiguration() {
}, this.propertyValueConversions);
}
+ @ReadingConverter
private enum DateToUtcLocalDateTimeConverter implements Converter {
INSTANCE;
@@ -370,6 +372,7 @@ public LocalDateTime convert(Date source) {
}
}
+ @ReadingConverter
private enum DateToUtcLocalTimeConverter implements Converter {
INSTANCE;
@@ -379,6 +382,7 @@ public LocalTime convert(Date source) {
}
}
+ @ReadingConverter
private enum DateToUtcLocalDateConverter implements Converter {
INSTANCE;
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
index 9bfbe989b6..4952a0c697 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java
@@ -69,6 +69,8 @@
import org.springframework.data.mongodb.core.BulkOperations.BulkMode;
import org.springframework.data.mongodb.core.aggregation.StringOperators;
import org.springframework.data.mongodb.core.convert.LazyLoadingProxy;
+import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
+import org.springframework.data.mongodb.core.convert.MongoCustomConversions.MongoConverterConfigurationAdapter;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexField;
@@ -1789,6 +1791,31 @@ public void findsEntityByDateReference() {
assertThat(result.get(0).date).isNotNull();
}
+
+ @Test // GH-4390
+ void nativeDriverDateTimeCodecShouldBeApplied/*when configured*/() {
+
+ MongoTestTemplate ops = new MongoTestTemplate(cfg -> {
+ cfg.configureConversion(conversion -> {
+ conversion.customConversions(
+ MongoCustomConversions.create(MongoConverterConfigurationAdapter::useNativeDriverJavaTimeCodecs));
+ });
+ });
+
+ TypeWithDate source = new TypeWithDate();
+ source.id = "id-1";
+ source.date = Date.from(Instant.now());
+
+ ops.save(source);
+
+ var dbDate = ops.execute(TypeWithDate.class,
+ collection -> collection.find(new org.bson.Document("_id", source.id)).first().get("date"));
+
+ TypeWithDate target = ops.findOne(query(where("date").is(source.date)), TypeWithDate.class);
+
+ assertThat(target.date).isEqualTo(source.date).isEqualTo(dbDate);
+ }
+
@Test // DATAMONGO-540
public void findOneAfterUpsertForNonExistingObjectReturnsTheInsertedObject() {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoCustomConversionsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoCustomConversionsUnitTests.java
index 84924f354f..ca13bc7913 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoCustomConversionsUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoCustomConversionsUnitTests.java
@@ -64,6 +64,16 @@ void propertyValueConverterRegistrationWorksAsExpected() {
assertThat(conversions.getPropertyValueConversions().hasValueConverter(persistentProperty)).isTrue();
}
+ @Test // GH-4390
+ void doesNotReturnConverterForNativeTimeTimeIfUsingDriverCodec() {
+
+ MongoCustomConversions conversions = MongoCustomConversions.create(config -> {
+ config.useNativeDriverJavaTimeCodecs();
+ });
+
+ assertThat(conversions.getCustomWriteTarget(Date.class)).isEmpty();
+ }
+
static class DateToZonedDateTimeConverter implements Converter {
@Override