From 0579e61a653ea81a3a5ef3dffd94fb5c4579028d Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 28 Oct 2015 15:54:52 +0100 Subject: [PATCH] Add API to register collection converters Previously, the only way to add the collection converters to a registry was to add *all* default converters. A new "addCollectionConverters" public method is now available to only register them. Issue: SPR-13618 --- .../support/DefaultConversionService.java | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java index 943c8c22ad4..408d1367b53 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/DefaultConversionService.java @@ -88,6 +88,41 @@ public class DefaultConversionService extends GenericConversionService { } } + /** + * Add collection converters. + * @param converterRegistry the registry of converters to add to (must also be castable to ConversionService, + * e.g. being a {@link ConfigurableConversionService}) + * @throws ClassCastException if the given ConverterRegistry could not be cast to a ConversionService + * @since 4.2.3 + */ + public static void addCollectionConverters(ConverterRegistry converterRegistry) { + ConversionService conversionService = (ConversionService) converterRegistry; + + converterRegistry.addConverter(new ArrayToCollectionConverter(conversionService)); + converterRegistry.addConverter(new CollectionToArrayConverter(conversionService)); + + converterRegistry.addConverter(new ArrayToArrayConverter(conversionService)); + converterRegistry.addConverter(new CollectionToCollectionConverter(conversionService)); + converterRegistry.addConverter(new MapToMapConverter(conversionService)); + + converterRegistry.addConverter(new ArrayToStringConverter(conversionService)); + converterRegistry.addConverter(new StringToArrayConverter(conversionService)); + + converterRegistry.addConverter(new ArrayToObjectConverter(conversionService)); + converterRegistry.addConverter(new ObjectToArrayConverter(conversionService)); + + converterRegistry.addConverter(new CollectionToStringConverter(conversionService)); + converterRegistry.addConverter(new StringToCollectionConverter(conversionService)); + + converterRegistry.addConverter(new CollectionToObjectConverter(conversionService)); + converterRegistry.addConverter(new ObjectToCollectionConverter(conversionService)); + + if (streamAvailable) { + converterRegistry.addConverter(new StreamConverter(conversionService)); + } + } + + // internal helpers private static void addScalarConverters(ConverterRegistry converterRegistry) { @@ -125,33 +160,6 @@ public class DefaultConversionService extends GenericConversionService { converterRegistry.addConverter(UUID.class, String.class, new ObjectToStringConverter()); } - private static void addCollectionConverters(ConverterRegistry converterRegistry) { - ConversionService conversionService = (ConversionService) converterRegistry; - - converterRegistry.addConverter(new ArrayToCollectionConverter(conversionService)); - converterRegistry.addConverter(new CollectionToArrayConverter(conversionService)); - - converterRegistry.addConverter(new ArrayToArrayConverter(conversionService)); - converterRegistry.addConverter(new CollectionToCollectionConverter(conversionService)); - converterRegistry.addConverter(new MapToMapConverter(conversionService)); - - converterRegistry.addConverter(new ArrayToStringConverter(conversionService)); - converterRegistry.addConverter(new StringToArrayConverter(conversionService)); - - converterRegistry.addConverter(new ArrayToObjectConverter(conversionService)); - converterRegistry.addConverter(new ObjectToArrayConverter(conversionService)); - - converterRegistry.addConverter(new CollectionToStringConverter(conversionService)); - converterRegistry.addConverter(new StringToCollectionConverter(conversionService)); - - converterRegistry.addConverter(new CollectionToObjectConverter(conversionService)); - converterRegistry.addConverter(new ObjectToCollectionConverter(conversionService)); - - if (streamAvailable) { - converterRegistry.addConverter(new StreamConverter(conversionService)); - } - } - /** * Inner class to avoid a hard-coded dependency on Java 8's {@code java.time} package.