diff --git a/pom.xml b/pom.xml
index 6a81501ac0..0ab001b5d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-commons
- 2.3.0.BUILD-SNAPSHOT
+ 2.3.0.DATACMNS-1597-SNAPSHOT
Spring Data Core
diff --git a/src/main/java/org/springframework/data/convert/CustomConversions.java b/src/main/java/org/springframework/data/convert/CustomConversions.java
index a52e0a249a..0dd8f26d4f 100644
--- a/src/main/java/org/springframework/data/convert/CustomConversions.java
+++ b/src/main/java/org/springframework/data/convert/CustomConversions.java
@@ -49,6 +49,7 @@
* @author Thomas Darimont
* @author Christoph Strobl
* @author Mark Paluch
+ * @author Anshul Mehra
* @since 2.0
*/
@Slf4j
@@ -107,7 +108,9 @@ public CustomConversions(StoreConversions storeConversions, Collection> conver
toRegister.addAll(DEFAULT_CONVERTERS);
toRegister.stream()//
- .flatMap(it -> storeConversions.getRegistrationsFor(it).stream())//
+ .flatMap(converter -> storeConversions.getRegistrationsFor(converter).stream())//
+ .filter(registration -> registration.isReading() ? registration.isSimpleSourceType() : true)//
+ .filter(registration -> registration.isWriting() ? registration.isSimpleTargetType() : true)//
.forEach(this::register);
Collections.reverse(toRegister);
diff --git a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java
index 75e99b8b85..328b93d7b5 100644
--- a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java
+++ b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java
@@ -17,13 +17,20 @@
import static org.assertj.core.api.Assertions.*;
+import java.math.BigInteger;
import java.text.DateFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
+import java.util.HashSet;
import java.util.Locale;
+import java.util.Set;
+import java.util.UUID;
+import java.util.regex.Pattern;
import org.joda.time.DateTime;
import org.junit.Test;
@@ -46,6 +53,7 @@
* @author Oliver Gierke
* @author Christoph Strobl
* @author Mark Paluch
+ * @author Anshul Mehra
* @since 2.0
*/
public class CustomConversionsUnitTests {
@@ -156,6 +164,16 @@ public void registersConvertersForJsr310() {
assertThat(customConversions.hasCustomWriteTarget(java.time.LocalDateTime.class)).isTrue();
}
+ @Test // DATACMNS-1597
+ public void skipsRegisteringConvertersForNonSimpleTypes() {
+
+ CustomConversions customConversions = new CustomConversions(StoreConversions.of(CustomSimpleTypes.HOLDER,
+ Collections.singletonList(ZonedDateTimeToInstantConverter.INSTANCE)), Collections.emptyList());
+
+ assertThat(customConversions.hasCustomWriteTarget(ZonedDateTime.class, Instant.class)).isFalse();
+ assertThat(customConversions.hasCustomReadTarget(java.time.LocalDateTime.class, Instant.class)).isFalse();
+ }
+
@Test // DATAMONGO-1131, DATACMNS-1035
public void registersConvertersForThreeTenBackPort() {
@@ -279,6 +297,17 @@ public String convert(Object source) {
}
+ @WritingConverter
+ enum ZonedDateTimeToInstantConverter implements Converter {
+
+ INSTANCE;
+
+ @Override
+ public Instant convert(ZonedDateTime source) {
+ return source.toInstant();
+ }
+ }
+
@WritingConverter
static class FormatConverterFactory implements ConverterFactory {
@@ -312,4 +341,39 @@ public T convert(String source) {
}
static class CustomType {}
+
+ static class CustomSimpleTypes {
+
+ public static final Set> AUTOGENERATED_ID_TYPES;
+
+ static {
+ Set> classes = new HashSet<>();
+ classes.add(String.class);
+ classes.add(BigInteger.class);
+ AUTOGENERATED_ID_TYPES = Collections.unmodifiableSet(classes);
+
+ Set> simpleTypes = new HashSet<>();
+ simpleTypes.add(Pattern.class);
+ simpleTypes.add(UUID.class);
+
+ CUSTOM_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes);
+ }
+
+ private static final Set> CUSTOM_SIMPLE_TYPES;
+
+ public static final SimpleTypeHolder HOLDER = new SimpleTypeHolder(CUSTOM_SIMPLE_TYPES, true) {
+
+ @Override
+ public boolean isSimpleType(Class> type) {
+
+ if (type.getName().startsWith("java.time")) {
+ return false;
+ }
+
+ return super.isSimpleType(type);
+ }
+ };
+
+ private CustomSimpleTypes() {}
+ }
}