前言
在前面的章节我们学习过使用SpringMVC框架进行web开发,前端页面传输的数据会由HandlerAdapter组件自动封装到业务方法的参数中。
在http表单中的所有请求参数都是String类型的,如果业务参数是String或者int类型,HandlerAdapter会自动完成数据转换,但是如果参数是其他数据类型,比如Date类型,HandlerAdapter是不会将String类型转换为Date类型的,我们需要实现Converter接口来协助SpringMVC完成数据类型的转换。
实现
1、创建DateConverter转换器
import org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String,Date>{
private String pattern;
public DateConverter(String pattern){
this.pattern = pattern;
}
public Date convert(String source) {
// TODO Auto-generated method stub
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
DateConverter转换器实现了org.springframework.core.convert.converter.Converter接口,将String类型的数值转换为Date类型。
2、配置springmvc.xml中的conversionService bean
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 日期转换器 -->
<bean class="com.jex.utils.DateConverter">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
</bean>
</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
注意:bean的类名称必须是org.springframework.context.support.ConversionServiceFactoryBean。bean必须包含一个converters属性,它将列出在应用程序中用到的所有定制Converter。将我们自定义的DateConverter添加到converters中,通过有参构造函数创建DateConverter。同时annotation-driven元素的conversion-service属性赋bean名称。
3、创建业务方法
@RequestMapping(value="/testDateConverter")
@ResponseBody
public String testDateConverter(Date date){
return date.toString();
}
4、创建addDate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="testDateConverter" method="post">
请输入日期:<input type="text" name="date"/>(yyyy-MM-dd)<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
5、运行
除了Date类型的转换,我们还可以自定义其它的数据格式,比如注册一个user,通过转换器将前端页面输入的"id-name-age"形式的String类型的数据直接转换为user对象。
1、创建User实体类
public class User {
private int id;
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
2、创建UserConverter转换器
import org.springframework.core.convert.converter.Converter;
public class UserConverter implements Converter<String,User>{
public User convert(String source) {
// TODO Auto-generated method stub
String[] args = source.split("-");
User user = new User();
user.setId(Integer.parseInt(args[0]));
user.setName(args[1]);
user.setAge(Integer.parseInt(args[2]));
return user;
}
}
3、配置springmvc.xml中的conversionService bean
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 日期转换器 -->
<bean class="com.jex.utils.DateConverter">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
</bean>
<!--User转换器 -->
<bean class="com.jex.utils.UserConverter"></bean>
</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
4、创建业务方法
@RequestMapping(value="/testUserConverter")
@ResponseBody
public String testUserConverter(User user){
return user.toString();
}
5、创建addUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="testUserConverter" method="post">
用户信息:<input type="text" name="student"/><font style="font-size:13px">(id-name-age)</font><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
6、运行
源码
链接:
https://pan.baidu.com/s/191wnUwW0a8AOeZnhOSWH5A
提取码:1v5q
网友评论