|
|
|
@ -18,13 +18,16 @@ package org.springframework.core.convert.support; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Locale; |
|
|
|
import java.util.Locale; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.core.convert.ConversionService; |
|
|
|
|
|
|
|
import org.springframework.core.convert.converter.ConverterRegistry; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* A specialization of {@link GenericConversionService} configured by default with |
|
|
|
* A specialization of {@link GenericConversionService} configured by default with |
|
|
|
* converters appropriate for most applications. |
|
|
|
* converters appropriate for most environments. |
|
|
|
* |
|
|
|
* |
|
|
|
* <p>Designed for direct instantiation but also exposes the static |
|
|
|
* <p>Designed for direct instantiation but also exposes the static |
|
|
|
* {@link #addDefaultConverters} utility method for ad hoc use against any |
|
|
|
* {@link #addDefaultConverters(ConverterRegistry)} utility method for ad hoc use against any |
|
|
|
* {@code GenericConversionService} instance. |
|
|
|
* {@code ConverterRegistry} instance. |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Chris Beams |
|
|
|
* @author Chris Beams |
|
|
|
* @since 3.1 |
|
|
|
* @since 3.1 |
|
|
|
@ -33,62 +36,79 @@ public class DefaultConversionService extends GenericConversionService { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Create a new {@code DefaultConversionService} with the set of |
|
|
|
* Create a new {@code DefaultConversionService} with the set of |
|
|
|
* {@linkplain DefaultConversionService#addDefaultConverters default converters}. |
|
|
|
* {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public DefaultConversionService() { |
|
|
|
public DefaultConversionService() { |
|
|
|
addDefaultConverters(this); |
|
|
|
addDefaultConverters(this); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// static utility methods
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Add converters appropriate for most environments. |
|
|
|
* Add converters appropriate for most environments. |
|
|
|
* @param conversionService the service to register default formatters against |
|
|
|
* @param converterRegistry the registry of converters to add to (must also be castable to ConversionService) |
|
|
|
|
|
|
|
* @throws ClassCastException if the converterRegistry could not be cast to a ConversionService |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public static void addDefaultConverters(GenericConversionService conversionService) { |
|
|
|
public static void addDefaultConverters(ConverterRegistry converterRegistry) { |
|
|
|
conversionService.addConverter(new ArrayToCollectionConverter(conversionService)); |
|
|
|
addScalarConverters(converterRegistry); |
|
|
|
conversionService.addConverter(new CollectionToArrayConverter(conversionService)); |
|
|
|
addCollectionConverters(converterRegistry); |
|
|
|
|
|
|
|
addFallbackConverters(converterRegistry); |
|
|
|
conversionService.addConverter(new ArrayToStringConverter(conversionService)); |
|
|
|
} |
|
|
|
conversionService.addConverter(new StringToArrayConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
// internal helpers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void addScalarConverters(ConverterRegistry converterRegistry) { |
|
|
|
|
|
|
|
converterRegistry.addConverter(new StringToBooleanConverter()); |
|
|
|
|
|
|
|
converterRegistry.addConverter(Boolean.class, String.class, new ObjectToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new ArrayToObjectConverter(conversionService)); |
|
|
|
converterRegistry.addConverterFactory(new StringToNumberConverterFactory()); |
|
|
|
conversionService.addConverter(new ObjectToArrayConverter(conversionService)); |
|
|
|
converterRegistry.addConverter(Number.class, String.class, new ObjectToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new CollectionToStringConverter(conversionService)); |
|
|
|
converterRegistry.addConverterFactory(new NumberToNumberConverterFactory()); |
|
|
|
conversionService.addConverter(new StringToCollectionConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
converterRegistry.addConverter(new StringToCharacterConverter()); |
|
|
|
|
|
|
|
converterRegistry.addConverter(Character.class, String.class, new ObjectToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new CollectionToObjectConverter(conversionService)); |
|
|
|
converterRegistry.addConverter(new NumberToCharacterConverter()); |
|
|
|
conversionService.addConverter(new ObjectToCollectionConverter(conversionService)); |
|
|
|
converterRegistry.addConverterFactory(new CharacterToNumberFactory()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
converterRegistry.addConverterFactory(new StringToEnumConverterFactory()); |
|
|
|
|
|
|
|
converterRegistry.addConverter(Enum.class, String.class, new EnumToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
converterRegistry.addConverter(new StringToLocaleConverter()); |
|
|
|
|
|
|
|
converterRegistry.addConverter(Locale.class, String.class, new ObjectToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new ArrayToArrayConverter(conversionService)); |
|
|
|
converterRegistry.addConverter(new PropertiesToStringConverter()); |
|
|
|
conversionService.addConverter(new CollectionToCollectionConverter(conversionService)); |
|
|
|
converterRegistry.addConverter(new StringToPropertiesConverter()); |
|
|
|
conversionService.addConverter(new MapToMapConverter(conversionService)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new PropertiesToStringConverter()); |
|
|
|
private static void addCollectionConverters(ConverterRegistry converterRegistry) { |
|
|
|
conversionService.addConverter(new StringToPropertiesConverter()); |
|
|
|
ConversionService conversionService = (ConversionService) converterRegistry; |
|
|
|
|
|
|
|
converterRegistry.addConverter(new ArrayToCollectionConverter(conversionService)); |
|
|
|
|
|
|
|
converterRegistry.addConverter(new CollectionToArrayConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new StringToBooleanConverter()); |
|
|
|
converterRegistry.addConverter(new ArrayToArrayConverter(conversionService)); |
|
|
|
conversionService.addConverter(Boolean.class, String.class, new ObjectToStringConverter()); |
|
|
|
converterRegistry.addConverter(new CollectionToCollectionConverter(conversionService)); |
|
|
|
|
|
|
|
converterRegistry.addConverter(new MapToMapConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new StringToCharacterConverter()); |
|
|
|
converterRegistry.addConverter(new ArrayToStringConverter(conversionService)); |
|
|
|
conversionService.addConverter(Character.class, String.class, new ObjectToStringConverter()); |
|
|
|
converterRegistry.addConverter(new StringToArrayConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new StringToLocaleConverter()); |
|
|
|
converterRegistry.addConverter(new ArrayToObjectConverter(conversionService)); |
|
|
|
conversionService.addConverter(Locale.class, String.class, new ObjectToStringConverter()); |
|
|
|
converterRegistry.addConverter(new ObjectToArrayConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverterFactory(new StringToNumberConverterFactory()); |
|
|
|
|
|
|
|
conversionService.addConverter(Number.class, String.class, new ObjectToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverterFactory(new StringToEnumConverterFactory()); |
|
|
|
|
|
|
|
conversionService.addConverter(Enum.class, String.class, new EnumToStringConverter()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new NumberToCharacterConverter()); |
|
|
|
|
|
|
|
conversionService.addConverterFactory(new CharacterToNumberFactory()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverterFactory(new NumberToNumberConverterFactory()); |
|
|
|
converterRegistry.addConverter(new CollectionToStringConverter(conversionService)); |
|
|
|
|
|
|
|
converterRegistry.addConverter(new StringToCollectionConverter(conversionService)); |
|
|
|
|
|
|
|
|
|
|
|
conversionService.addConverter(new ObjectToObjectConverter()); |
|
|
|
converterRegistry.addConverter(new CollectionToObjectConverter(conversionService)); |
|
|
|
conversionService.addConverter(new IdToEntityConverter(conversionService)); |
|
|
|
converterRegistry.addConverter(new ObjectToCollectionConverter(conversionService)); |
|
|
|
conversionService.addConverter(new FallbackObjectToStringConverter()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void addFallbackConverters(ConverterRegistry converterRegistry) { |
|
|
|
|
|
|
|
ConversionService conversionService = (ConversionService) converterRegistry; |
|
|
|
|
|
|
|
converterRegistry.addConverter(new ObjectToObjectConverter()); |
|
|
|
|
|
|
|
converterRegistry.addConverter(new IdToEntityConverter(conversionService)); |
|
|
|
|
|
|
|
converterRegistry.addConverter(new FallbackObjectToStringConverter()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |