1.为什么需要自定义日期类型转换器?
在控制器接收客户端请求参数,客户端请求的数据是字符串类型
我们之所以可以使用int、double类型接收是因为框架内部类型转换器
springMVC关于时间类型转换并不很好,需要我们自己手动类型转换
2.自定义日期类型转换器的步骤:
(1)自定义一个DateConverter实现Converter接口,实现其中的convert方法
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 第一个泛型代表接受的数据类型
* 第二个泛型代表想要转换的数据类型
* 写完自定义类型转换器要配置到配置文件中
* 程序运行会自动执行这个类型转换器,如果客户端发送的是字符串类型,经过这个转换器就会转换为日期类型
*/
public class DateConverter implements Converter<String,Date> {
private static String[] patterns={"yyyy-MM-dd hh:mm:ss","yyyy-MM-dd","yyyy年MM月dd日"};
@Override
public Date convert(String s) {
Date d = null;
for (String p:patterns){
SimpleDateFormat sdf = new SimpleDateFormat(p);
try {
d = sdf.parse(s);
return d;
} catch (ParseException e) {
continue;
}
}
return d;
}
}
(2)将写好的类型转换器配置到配置文件中
<!--1.将自定义时间类型转换器交个spring工厂管理-->
<bean id="dateConverter" class="com.baizhi.converter.DateConverter"/>
<!--2.将自定义的类型转换器,加入到springmvc框架中本身的转换器
springmvc本身已经存在一些类型转换器(string->int),将我们的转换器加入到里面
-->
<bean id="conversionService2"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConverter"/>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService2">
</mvc:annotation-driven>