diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoConfigurationSupport.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoConfigurationSupport.java
index b3c771bc4..445c4ef79 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoConfigurationSupport.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoConfigurationSupport.java
@@ -95,15 +95,16 @@ public abstract class MongoConfigurationSupport {
* Register custom {@link Converter}s in a {@link CustomConversions} object if required. These
* {@link CustomConversions} will be registered with the
* {@link org.springframework.data.mongodb.core.convert.MappingMongoConverter} and {@link #mongoMappingContext()}.
- * Returns an empty {@link MongoCustomConversions} instance by default.
- * NOTE: Use {@link #customConversionsConfiguration(MongoConverterConfigurationAdapter)} to configure
- * MongoDB native simple types and register custom {@link Converter converters}.
+ * Returns an empty {@link MongoCustomConversions} instance by default.
+ *
+ * NOTE: Use {@link #configureConverters(MongoConverterConfigurationAdapter)} to configure MongoDB
+ * native simple types and register custom {@link Converter converters}.
*
* @return must not be {@literal null}.
*/
@Bean
public CustomConversions customConversions() {
- return new MongoCustomConversions(this::customConversionsConfiguration);
+ return MongoCustomConversions.create(this::configureConverters);
}
/**
@@ -111,17 +112,11 @@ public abstract class MongoConfigurationSupport {
*
* @param converterConfigurationAdapter never {@literal null}.
* @since 2.3
+ * @see MongoConverterConfigurationAdapter#useNativeDriverJavaTimeCodecs()
+ * @see MongoConverterConfigurationAdapter#useSpringDataJavaTimeCodecs()
*/
- protected void customConversionsConfiguration(MongoConverterConfigurationAdapter converterConfigurationAdapter) {
+ protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) {
- /*
- * In case you want to use the MongoDB Java Driver native Codecs for java.time types instead of the converters SpringData
- * ships with, then you may want to call the following here.
- *
- * converterConfigurationAdapter.useNativeDriverJavaTimeCodecs()
- *
- * But please, be careful! LocalDate, LocalTime and LocalDateTime will be stored with different values by doing so.
- */
}
/**
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 ff9023a4f..aa96f9cab 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
@@ -31,13 +31,11 @@ import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.core.convert.converter.GenericConverter;
-import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
import org.springframework.data.convert.JodaTimeConverters;
import org.springframework.data.convert.WritingConverter;
import org.springframework.data.mapping.model.SimpleTypeHolder;
@@ -87,12 +85,17 @@ public class MongoCustomConversions extends org.springframework.data.convert.Cus
* @param converters must not be {@literal null}.
*/
public MongoCustomConversions(List> converters) {
+ this(MongoConverterConfigurationAdapter.from(converters));
+ }
- this(converterConfigurationAdapter -> {
-
- converterConfigurationAdapter.useSpringDataJavaTimeCodecs();
- converterConfigurationAdapter.registerConverters(converters);
- });
+ /**
+ * Create a new {@link MongoCustomConversions} given {@link MongoConverterConfigurationAdapter}.
+ *
+ * @param conversionConfiguration must not be {@literal null}.
+ * @since 2.3
+ */
+ protected MongoCustomConversions(MongoConverterConfigurationAdapter conversionConfiguration) {
+ super(conversionConfiguration.createConverterConfiguration());
}
/**
@@ -100,17 +103,15 @@ public class MongoCustomConversions extends org.springframework.data.convert.Cus
* of configuring store specific capabilities by providing deferred hooks to what will be configured when creating the
* {@link org.springframework.data.convert.CustomConversions#CustomConversions(ConverterConfiguration) instance}.
*
- * @param conversionConfiguration must not be {@literal null}.
+ * @param configurer must not be {@literal null}.
* @since 2.3
*/
- public MongoCustomConversions(Consumer conversionConfiguration) {
+ public static MongoCustomConversions create(Consumer configurer) {
- super(() -> {
+ MongoConverterConfigurationAdapter adapter = new MongoConverterConfigurationAdapter();
+ configurer.accept(adapter);
- MongoConverterConfigurationAdapter adapter = new MongoConverterConfigurationAdapter();
- conversionConfiguration.accept(adapter);
- return adapter.createConverterConfiguration();
- });
+ return new MongoCustomConversions(adapter);
}
@WritingConverter
@@ -152,14 +153,32 @@ public class MongoCustomConversions extends org.springframework.data.convert.Cus
* List of {@literal java.time} types having different representation when rendered via the native
* {@link org.bson.codecs.Codec} than the Spring Data {@link Converter}.
*/
- private static final List> JAVA_DRIVER_TIME_SIMPLE_TYPES = Arrays.asList(LocalDate.class, LocalTime.class,
- LocalDateTime.class);
+ private static final Set> JAVA_DRIVER_TIME_SIMPLE_TYPES = new HashSet<>(
+ Arrays.asList(LocalDate.class, LocalTime.class, LocalDateTime.class));
private boolean useNativeDriverJavaTimeCodecs = false;
- private List