diff --git a/src/main/java/org/springframework/data/convert/JodaTimeConverters.java b/src/main/java/org/springframework/data/convert/JodaTimeConverters.java index 687b9693d..016d13031 100644 --- a/src/main/java/org/springframework/data/convert/JodaTimeConverters.java +++ b/src/main/java/org/springframework/data/convert/JodaTimeConverters.java @@ -75,7 +75,6 @@ public abstract class JodaTimeConverters { return converters; } - @ReadingConverter public enum LocalDateTimeToJsr310Converter implements Converter { INSTANCE; diff --git a/src/main/java/org/springframework/data/convert/ThreeTenBackPortConverters.java b/src/main/java/org/springframework/data/convert/ThreeTenBackPortConverters.java index 216ef9382..f5d90d536 100644 --- a/src/main/java/org/springframework/data/convert/ThreeTenBackPortConverters.java +++ b/src/main/java/org/springframework/data/convert/ThreeTenBackPortConverters.java @@ -53,6 +53,14 @@ public abstract class ThreeTenBackPortConverters { private static final boolean THREE_TEN_BACK_PORT_IS_PRESENT = ClassUtils.isPresent("org.threeten.bp.LocalDateTime", ThreeTenBackPortConverters.class.getClassLoader()); + private static final Collection> SUPPORTED_TYPES; + + static { + + SUPPORTED_TYPES = THREE_TEN_BACK_PORT_IS_PRESENT // + ? Arrays.asList(LocalDateTime.class, LocalDate.class, LocalTime.class, Instant.class, java.time.Instant.class) + : Collections.emptySet(); + } /** * Returns the converters to be registered. Will only return converters in case we're running on Java 8. @@ -84,16 +92,9 @@ public abstract class ThreeTenBackPortConverters { } public static boolean supports(Class type) { - - if (!THREE_TEN_BACK_PORT_IS_PRESENT) { - return false; - } - - return Arrays.> asList(LocalDateTime.class, LocalDate.class, LocalTime.class, Instant.class, java.time.Instant.class) - .contains(type); + return SUPPORTED_TYPES.contains(type); } - @ReadingConverter public static enum LocalDateTimeToJsr310LocalDateTimeConverter implements Converter { diff --git a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java index df37e126f..55601b6e9 100644 --- a/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java +++ b/src/test/java/org/springframework/data/convert/CustomConversionsUnitTests.java @@ -37,6 +37,7 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.data.convert.ConverterBuilder.ConverterAware; import org.springframework.data.convert.CustomConversions.StoreConversions; +import org.springframework.data.mapping.model.SimpleTypeHolder; import org.threeten.bp.LocalDateTime; /** @@ -166,7 +167,9 @@ public class CustomConversionsUnitTests { @Test // DATAMONGO-1302, DATACMNS-1035 public void registersConverterFactoryCorrectly() { - CustomConversions customConversions = new CustomConversions(StoreConversions.NONE, + StoreConversions conversions = StoreConversions.of(new SimpleTypeHolder(Collections.singleton(Format.class), true)); + + CustomConversions customConversions = new CustomConversions(conversions, Collections.singletonList(new FormatConverterFactory())); assertThat(customConversions.getCustomWriteTarget(String.class, SimpleDateFormat.class)).isPresent(); @@ -175,19 +178,20 @@ public class CustomConversionsUnitTests { @Test // DATACMNS-1034 public void registersConverterFromConverterAware() { - ConverterAware converters = ConverterBuilder.reading(Left.class, Right.class, left -> new Right()) - .andWriting(right -> new Left()); + ConverterAware converters = ConverterBuilder // + .reading(Locale.class, CustomType.class, left -> new CustomType()) // + .andWriting(right -> Locale.GERMAN); CustomConversions conversions = new CustomConversions(StoreConversions.NONE, Collections.singletonList(converters)); - assertThat(conversions.hasCustomWriteTarget(Right.class)).isTrue(); - assertThat(conversions.hasCustomReadTarget(Left.class, Right.class)).isTrue(); + assertThat(conversions.hasCustomWriteTarget(CustomType.class)).isTrue(); + assertThat(conversions.hasCustomReadTarget(Locale.class, CustomType.class)).isTrue(); ConfigurableConversionService conversionService = new GenericConversionService(); conversions.registerConvertersIn(conversionService); - assertThat(conversionService.canConvert(Left.class, Right.class)).isTrue(); - assertThat(conversionService.canConvert(Right.class, Left.class)).isTrue(); + assertThat(conversionService.canConvert(CustomType.class, Locale.class)).isTrue(); + assertThat(conversionService.canConvert(Locale.class, CustomType.class)).isTrue(); } private static Class createProxyTypeFor(Class type) { @@ -307,7 +311,5 @@ public class CustomConversionsUnitTests { } } - static class Left {} - - static class Right {} + static class CustomType {} }