简介
SpringMVC上下文中内建了很多的类型转换器,可以完成绝大多数的Java类型的转换工作。
ConversionService是类型转换核心接口。
可以利用ConversionServiceFactoryBean在SpringIOC容器中定义一个ConversionService,
Spring将自动的识别IOC容器中的ConversionService,
并在bean属性配置以及SpringMVC处理方法入参绑定等场合使用这个ConversionService进行数据类型转换。
所以可以通过ConversionServiceFactoryBean的converters属性注册自定义类型转换器。
Spring支持的类型转换器
Spring中定义了三种类型转换的接口,实现任意一个接口都可以作为自定义的类型转换器,自定义的类型转换器注册到ConversionServiceFactoryBean中,类型转换器就生效了。
- Converter<S,T> (常用的一种)
- ConverterFactory
- GenericConverter
实例
- 实体类
public class Student {
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
- 编写页面
<form action="${pageContext.request.contextPath}/insertstu" method="post">
<input type="text" name="student" value="YYY-Male-22">
<button>Submit</button>
</form>
- 编写请求处理器的目标方法
@RequestMapping(value="insertstu",method=RequestMethod.POST)
public String testConverter(@RequestParam("student") Student student) {
System.out.println(student);
return "success";
}
- 编写自动义的类型转换器
package com.nhkj.util;
import org.springframework.core.convert.converter.Converter;
import com.nhkj.entity.Student;
public class StringToStudentConverter implements Converter<String, Student> {
@Override
public Student convert(String arg0) {
Student stu = new Student();
//分割字符串
String properties[] = arg0.split("-");
stu.setName(properties[0]);
stu.setSex(properties[1]);
stu.setAge(Integer.parseInt(properties[2]));
return stu;
}
}
- 配置文件
<!-- 配置ConversionFactoryBean 的 converters 属性 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.nhkj.util.StringToStudentConverter"></bean>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>