当我们在后台获取页面上的数据的时候,它们之间的数据类型可能不是一致的,这时候就要用到自定义类型转换器。在spring MVC中有自己的类型转换器,但同时,我们也可以根据需求定义自己的类型转换器。
我们知道的是ConversionService 是 Spring 类型转换体系的核心接口。可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC 容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换。可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器
首先,定义一个自定义类型转换器类(以将String类型转换为employee对象为例)
converter类:
package com.tanla.springmvc.converterTest;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import com.tanla.springmvc.crud.entities.Department;
import com.tanla.springmvc.crud.entities.Employee;
/**
* @author
* @date 2017年8月30日上午10:41:54
* @version 1.0
* 自定义转换类:实现将页面上的String类型装换为Employee类型
*/
@Component
public class EmployeeConverter implements Converter<String, Employee>{
@Override
public Employee convert(String source) {
// TODO Auto-generated method stub
if(source != null) {
String [] values = source.split("-");
if(values != null && values.length != 0) {
Employee employee = new Employee();
employee.setLastName(values[0]);
employee.setEmail(values[1]);
employee.setGender(Integer.parseInt(values[2]));
Department department = new Department();
department.setId(Integer.parseInt(values[3]));
employee.setDepartment(department);
return employee;
}
}
return null;
}
}
jsp页面:
<form action="converterTest" method="post">
<!-- lastname-email-gender-department.id -->
<input type="text" name="employee">
<input type="submit" value="submit">
</form>
handler类:
package com.tanla.springmvc.converterTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.tanla.springmvc.crud.dao.EmployeeDao;
import com.tanla.springmvc.crud.entities.Employee;
/**
* @author tanla
* @date 2017年8月30日上午10:56:18
* @version 1.0
*/
@Controller
public class ConverterTest {
@Autowired
private EmployeeDao employeeDao;
@RequestMapping("converterTest")
public String converter(@RequestParam("employee") Employee employee) {
employeeDao.save(employee);
return "redirect:/emps";
}
}
同时,在Spring.xml的配置文件中添加
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>