一、摘要
在spring中定义了3中类型转换接口,分别为:
- Converter:使用最简单,最不灵活;
- ConverterFactory:使用较为复杂,比较灵活;
- GenericConverter:使用最复杂,也最灵活;
本文仅介绍Convert接口的使用。
二、示例
Converter是用来将一个object转换为另一个object的接口。
1、先定义转换类,实现Converter<S,T>接口
public class Person{
private String userName;
private String password;
}
/**
* Spring MVC数据转换-简单示例
* 将形如:“zhangSan:888”的字符串转换为Person对象
*
*/
public class StringToPersonConverter implements Converter<String,Person>{
public Person convert(String source) {
Person p1 = new Person();
if(source != null){
String[] items = source.split(":");
p1.setUsername(items[0]);
p1.setPasswd(items[1]);
}
return p1;
}
}
2、装配自定义的conversionService
<!-- 扫描web包,应用Spring的注解 -->
<context:component-scan base-package="com.package.web"/>
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.package.model.StringToPersonConverter" />
</list>
</property>
</bean>
<!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面,默认优先级最低 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/jsp/"
p:suffix=".jsp" />
Controller:
@RequestMapping(value="/conversionTest")
public String conversionTest(@RequestParam("person")Person p,ModelMap modelMap){
modelMap.put("person",p);
return "test";
}
test.jsp:
<body>
<div >
用户名:{person.userName},密码:{person.password}
</div>
</body>
当前台发送请求:
http://localhost:8080/SpringMVCTest/test/conversionTest.action?person=zhangsan:666 时;
将person=zhangsan:666传递到后台,被StringToPersonConverter转换为Person对象;
跳转到界面:test.jsp,然后输出用户名:zhangsan,密码:666