1818
1919import java .util .Locale ;
2020
21+ import org .springframework .core .convert .ConversionService ;
22+ import org .springframework .core .convert .converter .ConverterRegistry ;
23+
2124/**
2225 * A specialization of {@link GenericConversionService} configured by default with
23- * converters appropriate for most applications .
26+ * converters appropriate for most environments .
2427 *
2528 * <p>Designed for direct instantiation but also exposes the static
26- * {@link #addDefaultConverters} utility method for ad hoc use against any
27- * {@code GenericConversionService } instance.
29+ * {@link #addDefaultConverters(ConverterRegistry) } utility method for ad hoc use against any
30+ * {@code ConverterRegistry } instance.
2831 *
2932 * @author Chris Beams
3033 * @since 3.1
@@ -33,62 +36,79 @@ public class DefaultConversionService extends GenericConversionService {
3336
3437 /**
3538 * Create a new {@code DefaultConversionService} with the set of
36- * {@linkplain DefaultConversionService#addDefaultConverters default converters}.
39+ * {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}.
3740 */
3841 public DefaultConversionService () {
3942 addDefaultConverters (this );
4043 }
4144
45+ // static utility methods
46+
4247 /**
4348 * Add converters appropriate for most environments.
44- * @param conversionService the service to register default formatters against
49+ * @param converterRegistry the registry of converters to add to (must also be castable to ConversionService)
50+ * @throws ClassCastException if the converterRegistry could not be cast to a ConversionService
4551 */
46- public static void addDefaultConverters (GenericConversionService conversionService ) {
47- conversionService .addConverter (new ArrayToCollectionConverter (conversionService ));
48- conversionService .addConverter (new CollectionToArrayConverter (conversionService ));
49-
50- conversionService .addConverter (new ArrayToStringConverter (conversionService ));
51- conversionService .addConverter (new StringToArrayConverter (conversionService ));
52+ public static void addDefaultConverters (ConverterRegistry converterRegistry ) {
53+ addScalarConverters (converterRegistry );
54+ addCollectionConverters (converterRegistry );
55+ addFallbackConverters (converterRegistry );
56+ }
57+
58+ // internal helpers
59+
60+ private static void addScalarConverters (ConverterRegistry converterRegistry ) {
61+ converterRegistry .addConverter (new StringToBooleanConverter ());
62+ converterRegistry .addConverter (Boolean .class , String .class , new ObjectToStringConverter ());
5263
53- conversionService . addConverter (new ArrayToObjectConverter ( conversionService ));
54- conversionService .addConverter (new ObjectToArrayConverter ( conversionService ));
64+ converterRegistry . addConverterFactory (new StringToNumberConverterFactory ( ));
65+ converterRegistry .addConverter (Number . class , String . class , new ObjectToStringConverter ( ));
5566
56- conversionService .addConverter (new CollectionToStringConverter (conversionService ));
57- conversionService .addConverter (new StringToCollectionConverter (conversionService ));
67+ converterRegistry .addConverterFactory (new NumberToNumberConverterFactory ());
68+
69+ converterRegistry .addConverter (new StringToCharacterConverter ());
70+ converterRegistry .addConverter (Character .class , String .class , new ObjectToStringConverter ());
5871
59- conversionService .addConverter (new CollectionToObjectConverter (conversionService ));
60- conversionService .addConverter (new ObjectToCollectionConverter (conversionService ));
72+ converterRegistry .addConverter (new NumberToCharacterConverter ());
73+ converterRegistry .addConverterFactory (new CharacterToNumberFactory ());
74+
75+ converterRegistry .addConverterFactory (new StringToEnumConverterFactory ());
76+ converterRegistry .addConverter (Enum .class , String .class , new EnumToStringConverter ());
77+
78+ converterRegistry .addConverter (new StringToLocaleConverter ());
79+ converterRegistry .addConverter (Locale .class , String .class , new ObjectToStringConverter ());
6180
62- conversionService .addConverter (new ArrayToArrayConverter ( conversionService ));
63- conversionService .addConverter (new CollectionToCollectionConverter ( conversionService ));
64- conversionService . addConverter ( new MapToMapConverter ( conversionService ));
81+ converterRegistry .addConverter (new PropertiesToStringConverter ( ));
82+ converterRegistry .addConverter (new StringToPropertiesConverter ( ));
83+ }
6584
66- conversionService .addConverter (new PropertiesToStringConverter ());
67- conversionService .addConverter (new StringToPropertiesConverter ());
85+ private static void addCollectionConverters (ConverterRegistry converterRegistry ) {
86+ ConversionService conversionService = (ConversionService ) converterRegistry ;
87+ converterRegistry .addConverter (new ArrayToCollectionConverter (conversionService ));
88+ converterRegistry .addConverter (new CollectionToArrayConverter (conversionService ));
6889
69- conversionService .addConverter (new StringToBooleanConverter ());
70- conversionService .addConverter (Boolean .class , String .class , new ObjectToStringConverter ());
90+ converterRegistry .addConverter (new ArrayToArrayConverter (conversionService ));
91+ converterRegistry .addConverter (new CollectionToCollectionConverter (conversionService ));
92+ converterRegistry .addConverter (new MapToMapConverter (conversionService ));
7193
72- conversionService .addConverter (new StringToCharacterConverter ( ));
73- conversionService .addConverter (Character . class , String . class , new ObjectToStringConverter ( ));
94+ converterRegistry .addConverter (new ArrayToStringConverter ( conversionService ));
95+ converterRegistry .addConverter (new StringToArrayConverter ( conversionService ));
7496
75- conversionService .addConverter (new StringToLocaleConverter ());
76- conversionService .addConverter (Locale .class , String .class , new ObjectToStringConverter ());
77-
78- conversionService .addConverterFactory (new StringToNumberConverterFactory ());
79- conversionService .addConverter (Number .class , String .class , new ObjectToStringConverter ());
80-
81- conversionService .addConverterFactory (new StringToEnumConverterFactory ());
82- conversionService .addConverter (Enum .class , String .class , new EnumToStringConverter ());
83-
84- conversionService .addConverter (new NumberToCharacterConverter ());
85- conversionService .addConverterFactory (new CharacterToNumberFactory ());
97+ converterRegistry .addConverter (new ArrayToObjectConverter (conversionService ));
98+ converterRegistry .addConverter (new ObjectToArrayConverter (conversionService ));
8699
87- conversionService .addConverterFactory (new NumberToNumberConverterFactory ());
100+ converterRegistry .addConverter (new CollectionToStringConverter (conversionService ));
101+ converterRegistry .addConverter (new StringToCollectionConverter (conversionService ));
88102
89- conversionService .addConverter (new ObjectToObjectConverter ());
90- conversionService .addConverter (new IdToEntityConverter (conversionService ));
91- conversionService .addConverter (new FallbackObjectToStringConverter ());
103+ converterRegistry .addConverter (new CollectionToObjectConverter (conversionService ));
104+ converterRegistry .addConverter (new ObjectToCollectionConverter (conversionService ));
105+ }
106+
107+ private static void addFallbackConverters (ConverterRegistry converterRegistry ) {
108+ ConversionService conversionService = (ConversionService ) converterRegistry ;
109+ converterRegistry .addConverter (new ObjectToObjectConverter ());
110+ converterRegistry .addConverter (new IdToEntityConverter (conversionService ));
111+ converterRegistry .addConverter (new FallbackObjectToStringConverter ());
92112 }
93113
94- }
114+ }
0 commit comments