1. 如何制定数据类型转换器
使用 Spring MVC 框架进行 Web 开发时,前端页面传输的数据会自动封装到业务方法的参数中,这项工作是由 HandlerAdapter 组件完成的。
1. 日期类型的转换
我们知道 HTTP 表单中的所有请求参数都是 String 类型的,如果业务方法的参数是 String 或者 int 类型,HandlerAdapter 可以自动完成数据转换,但如果参数是其他数据类型,比如 Date 类型,HandlerAdapter 是无法将 String 类型自动转为 Date 类型的,此时需要实现 Converter 接口来辅助 Spring MVC 完成数据类型的转换。
首先,先自定义一个Converter的实现类:
/*
Converter是org.springframework.core.convert.converter.Converter包下的,后面的两个泛型代表你要将什么数据类型转换为什么数据类型;
*/
public class DateConverter implements Converter<String, Date> {
String pattern;
//pattern代表你要转换的数据是什么格式的
public DateConverter(String pattern){
this.pattern = pattern;
}
@Override
public Date convert(String s) {
//SimpleDateFormat是Java.text包下的一个日期格式转换类;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
return simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
此时还需要在Spring的配置文件中配置如下信息:
<context:component-scan base-package="com.yy"/>
<!--后面的conversion-service这个参数是为了给数据定义类型转换器-->
<mvc:annotation-driven conversion-service="conversionService"/>
<!--视图解析器,将逻辑视图转换为物理视图-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<!-这个list中可以列出你定义的所有类型转换器->
<bean class="com.yy.mytest.DateConverter">
<!-- 调用有参构造函数创建 bean -->
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
</bean>
</list>
</property>
</bean>
我们来测试一下,先在webapp下创建一个form.jsp页面:
<%@ page import="com.yy.po.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/test">
日期:<input type="text" name="date">
<input type="submit"> 提交
</form>
</body>
</html>
再创建一个控制类:
@RequestMapping("/test")
@ResponseBody //这个注解可以使返回直接输出到页面上,不用返回jsp页面
public String test(Date date) {
return date.toString();
}
启动tomcat,输入http://localhost:808/form.jsp ,页面呈现如下:
输入如下:(注意输入的格式一定要按照xml配置文件中的那样:yyyy-MM-dd)
如果格式不是那样,就会报500服务器内部错误
点击提交按钮:
2. 自定义类型的转换
除了 Date 类型的转换,我们还可以自定义数据格式,比如注册一个User,前端页面按照 “id-name-address” 的形式输入 String 类型的数据,通过自定义 Convertor,可以将该 String 类型的数据直接转换为 Student 对象;
具体操作第一步还是定义类型转换的类:
public class DateConverter implements Converter<String, User> {
@Override
public User convert(String s) {
User user = new User();
String[] splitS = s.split("-");
user.setUserid(Integer.parseInt(splitS[0]));
user.setUsername(splitS[1]);
user.setUseraddr(splitS[2]);
return user;
}
}
xml中:(其他与上面的配置一样)
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.yy.mytest.UserConverter"></bean>
</list>
</property>
</bean>