diff --git a/src/main/java/org/springframework/data/convert/CustomConversions.java b/src/main/java/org/springframework/data/convert/CustomConversions.java index 902b04f9b..6a2feb935 100644 --- a/src/main/java/org/springframework/data/convert/CustomConversions.java +++ b/src/main/java/org/springframework/data/convert/CustomConversions.java @@ -288,7 +288,7 @@ public class CustomConversions { */ private boolean isSupportedConverter(ConverterRegistrationIntent registrationIntent) { - boolean register = registrationIntent.isUserConverter() + boolean register = registrationIntent.isUserConverter() || registrationIntent.isStoreConverter() || (registrationIntent.isReading() && registrationIntent.isSimpleSourceType()) || (registrationIntent.isWriting() && registrationIntent.isSimpleTargetType()); @@ -597,6 +597,10 @@ public class CustomConversions { return isConverterOfSource(ConverterOrigin.USER_DEFINED); } + public boolean isStoreConverter() { + return isConverterOfSource(ConverterOrigin.STORE); + } + public boolean isDefaultConverter() { return isConverterOfSource(ConverterOrigin.DEFAULT); } diff --git a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java index 53ff0c92c..29f58d3bf 100644 --- a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java +++ b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.Locale; +import java.util.Map; import java.util.function.Predicate; import org.joda.time.DateTime; @@ -42,6 +43,7 @@ import org.springframework.data.convert.CustomConversions.ConverterConfiguration import org.springframework.data.convert.CustomConversions.StoreConversions; import org.springframework.data.convert.Jsr310Converters.LocalDateTimeToDateConverter; import org.springframework.data.convert.ThreeTenBackPortConverters.LocalDateTimeToJavaTimeInstantConverter; +import org.springframework.data.geo.Point; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.threeten.bp.LocalDateTime; @@ -219,6 +221,21 @@ public class CustomConversionsUnitTests { verify(registry, never()).addConverter(any(LocalDateTimeToJavaTimeInstantConverter.class)); } + @Test // DATACMNS-1665 + public void registersStoreConverter() { + + ConverterRegistry registry = mock(ConverterRegistry.class); + + SimpleTypeHolder holder = new SimpleTypeHolder(Collections.emptySet(), true); + + CustomConversions conversions = new CustomConversions(StoreConversions.of(holder, PointToMapConverter.INSTANCE), + Collections.emptyList()); + conversions.registerConvertersIn(registry); + + assertThat(conversions.isSimpleType(Point.class)); + verify(registry).addConverter(any(PointToMapConverter.class)); + } + @Test // DATACMNS-1615 public void doesNotSkipUnsupportedUserConverter() { @@ -340,6 +357,18 @@ public class CustomConversionsUnitTests { } + @WritingConverter + enum PointToMapConverter implements Converter> { + + INSTANCE; + + @Override + public Map convert(Point source) { + return source != null ? Collections.emptyMap() : null; + } + + } + @WritingConverter static class FormatConverterFactory implements ConverterFactory {