diff --git a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java index 3a6776b226..628da8539c 100644 --- a/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java +++ b/org.springframework.context/src/main/java/org/springframework/mapping/support/SpelMapper.java @@ -115,6 +115,16 @@ public class SpelMapper implements Mapper { return mapping; } + /** + * Adds a Mapper to apply to complex nested property mappings of a specific sourceType/targetType pair. + * @param sourceType the source nested property type + * @param targetType the target nested property type + * @param nestedMapper the nested mapper + */ + public void addNestedMapper(Class sourceType, Class targetType, Mapper nestedMapper) { + this.conversionService.addGenericConverter(sourceType, targetType, new MapperConverter(nestedMapper)); + } + /** * Return this mapper's converter registry. * Allows for registration of simple type converters as well as converters that map nested objects using a Mapper. diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index c292a5c180..a586ed54bb 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -183,15 +183,13 @@ public class GenericConversionService implements ConversionService, ConverterReg return invokeConverter(converter, source, sourceType, targetType); } - // subclassing hooks - /** * Registers a GenericConverter. * @param sourceType the source type to convert from * @param targetType the target type to convert to * @param converter the generic converter. */ - protected void addGenericConverter(Class sourceType, Class targetType, GenericConverter converter) { + public void addGenericConverter(Class sourceType, Class targetType, GenericConverter converter) { getSourceMap(sourceType).put(targetType, converter); } @@ -202,7 +200,7 @@ public class GenericConversionService implements ConversionService, ConverterReg * @param targetType the target type to convert to * @param converter the converter. */ - protected void addConverter(Class sourceType, Class targetType, Converter converter) { + public void addConverter(Class sourceType, Class targetType, Converter converter) { addGenericConverter(sourceType, targetType, new ConverterAdapter(converter)); } @@ -213,10 +211,12 @@ public class GenericConversionService implements ConversionService, ConverterReg * @param targetType the target type to convert to * @param converter the converter.factory */ - protected void addConverterFactory(Class sourceType, Class targetType, ConverterFactory converterFactory) { + public void addConverterFactory(Class sourceType, Class targetType, ConverterFactory converterFactory) { addGenericConverter(sourceType, targetType, new ConverterFactoryAdapter(converterFactory)); } + // subclassing hooks + /** * Hook method to convert a null source. * Default implementation returns null.