日期的转换
-
SpringMVC中有自己默认的日期转换规则,当你输入1999/9/9时SpringMVC能够识别,但当你输入1999-9-9时就需要自己配置日期格式了
-
使用xml配置文件配置日期转换格式
<!-- 启动自定义Converter -->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 1.设置格式类型Converter,注册为Bean,受Spring管理 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 2.自定义converter格式类型设定,该设定使用的是同类型覆盖的思想-->
<property name="formatters">
<!-- 3.使用set保障相同类型的转换器仅保留一个,避免冲突-->
<set>
<!-- 4.设置具体的格式类型 -->
<bean class="org.springframework.format.datetime.DateFormatter">
<!-- 5.类型规则 -->
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
</set>
</property>
</bean>
- 使用注解配置日期转换格式
名称: @DateTimeFormat
类型: 形参注解、成员变量注解
位置:形参前面 或 成员变量上方
作用:为当前参数或变量指定类型转换规则
注意:依赖注解驱动支持
<mvc:annotation-driven/>
public String requestDate(@DateTimeFormat(pattern = "yyyy-MM-dd")Date date){
System.out.println("date="+date);
return "page.jsp";
}
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
自定义类型转换器
- 自定义类型转换器,实现Converter接口,并制定转换前与转换后的类型
<!--1.将自定义的Converter注册为Bean,受SpringMVC管理 -->
<bean id="myDateConverter" class="com.springmvc.converter.MyDateConverter"/>
<!--2.设定自定义Converter服务bean-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--3.注入所有的自定义Converter,该设定使用的是同类型覆盖的思想-->
<property name="converters">
<!--4.set保障同类型转换器仅保留一个,去重规则以Converter<S,T>的泛型为准-->
<set>
<!--5.具体的类型转换器-->
<ref bean="myDateConverter"/>
</set>
</property>
</bean>
//自定义类型转换器,实现converter接口,接口中指定的泛型即为最终作用的条件
//本列中的泛型填写的是String,Date,最终出现字符串转日期时,该类型转换器生效
public class MyDateConverter implements Converter<String,Date>{
//重写接口的抽象方法,参数由泛型决定
public Date convert(String source){
DateFormat df = new SimplDateFormat("yyyy-MM-dd");
Date date = null;
//类型转换器无法预计使用过程中出现的异常,因此必须在类型转换器内部捕获,不允许抛出,框架无法预计此类异常如何处理
try{
date = df.parse(source);
}catch(ParseException e){
e.printStackTrace();
}
return date;
}
}
- 通过注册自定义转换器,将该功能加入到SpringMVC的转换服务ConverterService中
<!--开启注解驱动,加载自定义格式转换器对应的类型转换服务-->
<mvc:annotation-driven conversion-service="conversionService"/>