我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,如果想把一个字符串转换成其它实体类型,spring没有提供这样默认的功能,我们需要自定义类型转换器。
这里有个实体类Employee
public class Employee {
private String name;
private Integer age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [name=" + name + ", age=" + age + ", gender=" + gender
+ "]";
}
}
规定将字符串转换成实体类的规则为:name-age-gender
那么接下来就写一个类型转换器,需要实现一个接口org.springframework.core.convert.converter.Converter
@Component
public class EmployeeConverter implements Converter<String, Employee> {
@Override
public Employee convert(String source) {
if(source != null){
String [] vals = source.split("-");
if(vals != null && vals.length == 3){
String name= vals[0];
String age= vals[1];
Integer gender = Integer.parseInt(vals[2]);
Employee employee = new Employee(name, age, email, gender);
System.out.println(source + "--convert--" + employee);
return employee;
}
}
return null;
}
}
这里我们为转换器加上@Component注解,是为了让Spring自动扫描该转换器到容器中。这样就不用通过配置文件配置<bean>了.
接下来编写控制器
@Controller
public class EmployeeController {
@RequestMapping("/testConversionServiceConverer")
public String testConverter(@RequestParam("employee") Employee employee){
System.out.println("save: " + employee);
return "redirect:/emps";
}
}
我们还需要在spring配置文件中配置,如下类容。让转换器生效
<mvc:default-servlet-handler/>
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 配置 ConversionService -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>
ConversionService 是 Spring 类型转换体核心接口。 可以利 ConversionServiceFactoryBean 在 Spring IOC 容器中定义一个 ConversionService. Spring将动识别出 IOC 容器中 ConversionService 并在 Bean 属性及Spring MVC 处方法入参绑定场合使它 进数据转换可过 ConversionServiceFactoryBean converters 属性注册定义类型转换器.