ConversionService 是 Spring 类型转换体系的核心接口。可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器。
Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactroyBean 中: – Converter<S,T>:将 S 类型对象转为 T 类型对象 – ConverterFactory:将相同系列多个 “同质” Converter 封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double 等)对象)可使用该转换器工厂类 – GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。
下面我们来完成一个字符串转换为对象的例子:
1.首先创建一个自定义转换器,创建完毕后添加到IOC容器中:
@Component public class EmployeeConverter implements Converter<String,Employee> { public Employee convert(String s) { if(s!=null){ String[] vals=s.split("-"); if (vals!=null&&vals.length==4){ String lastName=vals[0]; String emil=vals[1]; Integer gender=Integer.parseInt(vals[2]); Department department=new Department(); department.setId(Integer.parseInt(vals[3])); Employee employee=new Employee(null,lastName,emil,gender,department); return employee; } } return null; } } 2.配置ConversionService- <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="employeeConverter"/>//类名的第一个字母小写 </set> </property> </bean> 3. <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>4.在页面上添加一个表单:
<form action="testConversionServiceConverter" method="POST"> Employee:<input type="text" name="employee"> <input type="submit" value="Submit"> </form>5.添加一个控制器,相应请求:
@Controller public class SpringMVCTest { @Autowired private EmployeeDao employeeDao; @RequestMapping("/testConversionServiceConverter") public String testConverter(@RequestParam("employee")Employee employee){ employeeDao.save(employee); return "redirect:/emps"; } }