Spring框架提供了多种类型转换器,用于在同数据类型之间进行转换。以下是Spring支持的一些常用转换器:
- StringToIntegerConverter:将字符串转换为整数类型。
- StringToDoubleConverter:将字符串转换为双精度浮点数类型。
- StringToDateConverter:将字符串转换为日期类型。
- StringToEnumConverter:将字符串转换为枚举类型。
- StringToArrayConverter:将字符串转换为数组类型。
- StringToCollectionConverter:将字符串转换为集合类型。
这些转换器可以通过在Spring配置文件中进行配置,或者使用注解方式进行声明和使用。Spring还支持自定义转换器,可以实现Converter接口或使用ConversionService进行自定义转换。
在Spring框架中,我们可以通过实现Converter
接口或者GenericConverter
接口来自定义类型转换器。
- 实现
Converter
接口:
- 创建一个类,实现
Converter<S, T>
接口,其中S
表示源类型,T
表示目标类型。 - 实现
convert
方法,该方法接收一个源类型的对象,并返回一个目标类型的对象。 - 在Spring配置文件中注册自定义的类型转换器。
- 实现
GenericConverter
接口:
- 创建一个类,实现
GenericConverter
接口。 - 实现
convert
方法,该方法接收一个源类型的对象、源类型的元数据信息和目标类型的元数据信息,并返回一个目标类型的对象。 - 在Spring配置文件中注册自定义的类型转换器。
下面是一个示例,演示如何使用自定义类型转换器将字符串转换为日期类型:
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateConverter implements Converter<String, Date> {
private final SimpleDateFormat dateFormat;
public StringToDateConverter(String pattern) {
this.dateFormat = new SimpleDateFormat(pattern);
}
@Override
public Date convert(String source) {
try {
return dateFormat.parse(source);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid date format");
}
}
}
在Spring配置文件中注册自定义的类型转换器:
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.example.StringToDateConverter">
<constructor-arg value="yyyy-MM-dd" />
</bean>
</set>
</property>
</bean>
这样,当Spring遇到需要将字符串转换为日期类型时,就会使用我们自定义的类型转换器进行转换。
Spring 定义了 3 种类型的转换器接口,实现任意一个转换 器接口都可以作为自定义转换器注册到 ConversionServiceFactroyBean 中:
– Converter<S,T>:将 S 类型对象转为 T 类型对象
– ConverterFactory:将相同系列多个 “同质” Converter 封装在一 起。如果希望将一种类型的对象转换为另一种类型及其子类的对 象(例如将 String 转换为 Number 及 Number 子类
(Integer、Long、Double 等)对象)可使用该转换器工厂类
– GenericConverter:会根据源类对象及目标类对象所在的宿主类
中的上下文信息进行类型转换