Package org.springframework.core.convert.support

# Class GenericConversionService

java.lang.Object
org.springframework.core.convert.support.GenericConversionService

All Implemented Interfaces:
  `ConversionService`, `ConverterRegistry`, `ConfigurableConversionService`

Direct Known Subclasses:
  `DefaultConversionService`

public class GenericConversionService extends Object implements ConfigurableConversionService
Base `ConversionService` implementation suitable for use in most environments. Indirectly implements `ConverterRegistry` as registration API through the `ConfigurableConversionService` interface.

Since:
  3.0
Author:
  Keith Donald, Juergen Hoeller, Chris Beams, Phillip Webb, David Haraburda

## Constructor Summary

Constructors
Constructor
Description
`GenericConversionService()`

## Method Summary

Modifier and Type
Method
Description
`<S, T> void`
`addConverter(Class<S> sourceType, Class<T> targetType, Converter<? super S,? extends T> converter)`
Add a plain converter to this registry.
`void`
`addConverter(Converter<?,?> converter)`
Add a plain converter to this registry.
`void`
`addConverter(GenericConverter converter)`
Add a generic converter to this registry.
`void`
`addConverterFactory(ConverterFactory<?,?> factory)`
Add a ranged converter factory to this registry.
`boolean`
`canBypassConvert(TypeDescriptor sourceType, TypeDescriptor targetType)`
Return whether conversion between the source type and the target type can be bypassed.
`boolean`
`canConvert(Class<?> sourceType, Class<?> targetType)`
Return `true` if objects of `sourceType` can be converted to the `targetType`.
`boolean`
`canConvert(TypeDescriptor sourceType, TypeDescriptor targetType)`
Return `true` if objects of `sourceType` can be converted to the `targetType`.
`<T> T`
`convert(Object source, Class<T> targetType)`
Convert the given `source` to the specified `targetType`.
`Object`
`convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType)`
Convert the given `source` to the specified `targetType`.
`protected Object`
`convertNullSource(TypeDescriptor sourceType, TypeDescriptor targetType)`
Template method to convert a `null` source.
`protected GenericConverter`
`getConverter(TypeDescriptor sourceType, TypeDescriptor targetType)`
Hook method to look up the converter for a given sourceType/targetType pair.
`protected GenericConverter`
`getDefaultConverter(TypeDescriptor sourceType, TypeDescriptor targetType)`
Return the default converter if no converter is found for the given sourceType/targetType pair.
`void`
`removeConvertible(Class<?> sourceType, Class<?> targetType)`
Remove any converters from `sourceType` to `targetType`.
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.core.convert.ConversionService

`convert`

## Constructor Details

### GenericConversionService

public GenericConversionService()

## Method Details

### addConverter

public void addConverter(Converter<?,?> converter)
Description copied from interface: `ConverterRegistry`
Add a plain converter to this registry. The convertible source/target type pair is derived from the Converter's parameterized types.

Specified by:
  `addConverter` in interface `ConverterRegistry`

### addConverter

public <S, T> void addConverter(Class<S> sourceType, Class<T> targetType, Converter<? super S,? extends T> converter)
Description copied from interface: `ConverterRegistry`
Add a plain converter to this registry. The convertible source/target type pair is specified explicitly.

Allows for a Converter to be reused for multiple distinct pairs without having to create a Converter class for each pair.

Specified by:
  `addConverter` in interface `ConverterRegistry`

### addConverter

public void addConverter(GenericConverter converter)
Description copied from interface: `ConverterRegistry`
Add a generic converter to this registry.

Specified by:
  `addConverter` in interface `ConverterRegistry`

### addConverterFactory

public void addConverterFactory(ConverterFactory<?,?> factory)
Description copied from interface: `ConverterRegistry`
Add a ranged converter factory to this registry. The convertible source/target type pair is derived from the ConverterFactory's parameterized types.

Specified by:
  `addConverterFactory` in interface `ConverterRegistry`

### removeConvertible

public void removeConvertible(Class<?> sourceType, Class<?> targetType)
Description copied from interface: `ConverterRegistry`
Remove any converters from `sourceType` to `targetType`.

Specified by:
  `removeConvertible` in interface `ConverterRegistry`
Parameters:
  `sourceType` - the source type
  `targetType` - the target type

### canConvert

public boolean canConvert(@Nullable Class<?> sourceType, Class<?> targetType)
Description copied from interface: `ConversionService`
Return `true` if objects of `sourceType` can be converted to the `targetType`.

If this method returns `true`, it means `ConversionService.convert(Object, Class)` is capable of converting an instance of `sourceType` to `targetType`.

Special note on collections, arrays, and maps types: For conversion between collection, array, and map types, this method will return `true` even though a convert invocation may still generate a `ConversionException` if the underlying elements are not convertible. Callers are expected to handle this exceptional case when working with collections and maps.

Specified by:
  `canConvert` in interface `ConversionService`
Parameters:
  `sourceType` - the source type to convert from (may be `null` if source is `null`)
  `targetType` - the target type to convert to (required)
Returns:
  `true` if a conversion can be performed, `false` if not

### canConvert

public boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType)
Description copied from interface: `ConversionService`
Return `true` if objects of `sourceType` can be converted to the `targetType`. The TypeDescriptors provide additional context about the source and target locations where conversion would occur, often object fields or property locations.

If this method returns `true`, it means `ConversionService.convert(Object, TypeDescriptor, TypeDescriptor)` is capable of converting an instance of `sourceType` to `targetType`.

Special note on collections, arrays, and maps types: For conversion between collection, array, and map types, this method will return `true` even though a convert invocation may still generate a `ConversionException` if the underlying elements are not convertible. Callers are expected to handle this exceptional case when working with collections and maps.

Specified by:
  `canConvert` in interface `ConversionService`
Parameters:
  `sourceType` - context about the source type to convert from (may be `null` if source is `null`)
  `targetType` - context about the target type to convert to (required)
Returns:
  `true` if a conversion can be performed between the source and target types, `false` if not

### canBypassConvert

public boolean canBypassConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType)
Return whether conversion between the source type and the target type can be bypassed.

More precisely, this method will return true if objects of sourceType can be converted to the target type by returning the source object unchanged.

Parameters:
  `sourceType` - context about the source type to convert from (may be `null` if source is `null`)
  `targetType` - context about the target type to convert to (required)
Returns:
  `true` if conversion can be bypassed; `false` otherwise
Throws:
  `IllegalArgumentException` - if targetType is `null`
Since:
  3.2

### convert

@Nullable public <T> T convert(@Nullable Object source, Class<T> targetType)
Description copied from interface: `ConversionService`
Convert the given `source` to the specified `targetType`.

Specified by:
  `convert` in interface `ConversionService`
Parameters:
  `source` - the source object to convert (may be `null`)
  `targetType` - the target type to convert to (required)
Returns:
  the converted object, an instance of targetType

### convert

@Nullable public Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType)
Description copied from interface: `ConversionService`
Convert the given `source` to the specified `targetType`. The TypeDescriptors provide additional context about the source and target locations where conversion will occur, often object fields or property locations.

Specified by:
  `convert` in interface `ConversionService`
Parameters:
  `source` - the source object to convert (may be `null`)
  `sourceType` - context about the source type to convert from (may be `null` if source is `null`)
  `targetType` - context about the target type to convert to (required)
Returns:
  the converted object, an instance of `targetType`

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### convertNullSource

@Nullable protected Object convertNullSource(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType)
Template method to convert a `null` source.

The default implementation returns `null` or the Java 8 `Optional.empty()` instance if the target type is `java.util.Optional`. Subclasses may override this to return custom `null` objects for specific target types.

Parameters:
  `sourceType` - the source type to convert from
  `targetType` - the target type to convert to
Returns:
  the converted null object

### getConverter

@Nullable protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType)
Hook method to look up the converter for a given sourceType/targetType pair. First queries this ConversionService's converter cache. On a cache miss, then performs an exhaustive search for a matching converter. If no converter matches, returns the default converter.

Parameters:
  `sourceType` - the source type to convert from
  `targetType` - the target type to convert to
Returns:
  the generic converter that will perform the conversion, or `null` if no suitable converter was found
See Also:
  - `getDefaultConverter(TypeDescriptor, TypeDescriptor)`

### getDefaultConverter

@Nullable protected GenericConverter getDefaultConverter(TypeDescriptor sourceType, TypeDescriptor targetType)
Return the default converter if no converter is found for the given sourceType/targetType pair.

Returns a NO_OP Converter if the source type is assignable to the target type. Returns `null` otherwise, indicating no suitable converter could be found.

Parameters:
  `sourceType` - the source type to convert from
  `targetType` - the target type to convert to
Returns:
  the default generic converter that will perform the conversion