参考
有时候我们会碰到这么一个问题,有一个实体类,里面有一个Date类型的数据,jsp页面传递的时间参数是String的,这就导致无法对应,springmvc无法帮我们自动封装参数到实体类中了,这里我解决的方法有两种:
1.是自定义一个转换器,实现Converter<S,T>接口,S:代表要进行转换的参数的类型,T:代表转换后的类型
2.利用@DateTimeFormat注解
1 简单测试代码如下:DateConverter类中conver()方法将字符串转化为自定义的时间类型,当前台页面发送请求中有参数为string类型,而在后台接收时用Date类型直接接收,因为转换器会帮我们转化
package com.wuyx.Utils;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverte implements Converter<String , Date> {
//定义日期转换规则数组
String[] pattern;
@Override
public Date convert(String source) {
if (null==source || "".equals(source.trim())){
return null;
}
// 根据前台日期数据长度,初步筛选匹配规则
if (source.length()>10){
pattern=new String[]{"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss"};
}else {
pattern=new String[]{"yyyy-MM-dd","yyyy/MM/dd"};
}
// 循环匹配日期格式,如本次不匹配则进入下一次条件匹配
for (String p:pattern){
try {
return new SimpleDateFormat(p).parse(source);
} catch (ParseException e) {
continue;
}
}
return null;
}
}
该转换器如果要实现,还需要将器注册到mvc注解驱动中,让注解驱动的conversion-service使用我们自定义的
<!-- 第三步:注册处理器映射器/处理器适配器 ,添加conversion-service属性-->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 第二步: 创建convertion-Service ,并注入dateConvert-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConvert"/>
</set>
</property>
</bean>
<!-- 第一步: 创建自定义日期转换规则 -->
<bean id="dateConvert" class="com.wuyx.Utils.DateConverte"/>