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