SpringMVC的数据转换

数据转换

  Spring MVC 上下文中内建了很多转换器,可完成大多数Java类型的转换工作。

  自定义类型转换器,ConversionService是Spring类型转换体系的核心接口。可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC
容器中定义一个 ConversionService. Spring 将自动识别出
IOC 容器中的 ConversionService,并在 Bean 属性配置及
Spring MVC 处理方法入参绑定等场合使用它进行数据的转换

  可通过ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器

1
2
3
4
5
6
7
8
9
<!-- 配置 ConversionService -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>

Spring 支持的转换器

Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到
ConversionServiceFactroyBean 中:

  • Converter<S,T>:将 S 类型对象转为 T 类型对象

  • ConverterFactory:将相同系列多个 “同质” Converter 封装在一
    起。如果希望将一种类型的对象转换为另一种类型及其子类的对
    象(例如将 String 转换为 Number 及 Number 子类
    (Integer、Long、Double 等)对象)可使用该转换器工厂类

  • GenericConverter:会根据源类对象及目标类对象所在的宿主类
    中的上下文信息进行类型转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Component
public class EmployeeConverter implements Converter<String, Employee> {

@Override
public Employee convert(String source) {
if(source != null){
String [] vals = source.split("-");
//GG-gg@atguigu.com-0-105
if(vals != null && vals.length == 4){
String lastName = vals[0];
String email = vals[1];
Integer gender = Integer.parseInt(vals[2]);
Department department = new Department();
department.setId(Integer.parseInt(vals[3]));

Employee employee = new Employee(null, lastName, email, gender, department);
System.out.println(source + "--convert--" + employee);
return employee;
}
}
return null;
}

}
-------------本文结束感谢阅读-------------