Spring MVC 类型转换器



1、xml格式
<!--开启注解驱动,加载自定义格式化转换器对应的类型转换服务--> <mvc:annotation-driven conversion-service="conversionService"/> <!--自定义格式化转换器--> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!--覆盖格式化转换器定义规则,该规则是一个set集合,对格式化转换器来说是追加和替换的思想,而不是覆盖整体格式化转换器--> <property name="formatters"> <set> <!--具体的日期格式化转换器--> <bean class="org.springframework.format.datetime.DateFormatter"> <!--具体的规则,不具有通用性,仅适用于当前的日期格式化转换器--> <property name="pattern" value="yyyy-MM-dd"/> </bean> </set> </property> </bean> //数据类型转换,使用自定义格式化器或@DateTimeFormat注解设定日期格式 把默认的“yyyy/MM/dd”类型转换成“yyyy-MM-dd” //两种方式都依赖springmvc的注解启动才能运行 //http://localhost/requestParam11?date=1999-09-09 @RequestMapping("/requestParam11") public String requestParam11(Date date){ System.out.println(date); return "page.jsp"; }
注解格式
//XML 配置中添加如下 <!--开启注解驱动,加载自定义格式化转换器对应的类型转换服务--> <mvc:annotation-driven/> //数据类型转换,使用自定义格式化器或@DateTimeFormat注解设定日期格式 //两种方式都依赖springmvc的注解启动才能运行 //http://localhost/requestParam11?date=1999-09-09 @RequestMapping("/requestParam11") public String requestParam11(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date){ System.out.println(date); return "page.jsp"; }

自定义类型转换器

package com.itheima.converter; import org.springframework.core.convert.converter.Converter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; //自定义类型转换器,实现Converter接口,接口中指定的泛型即为最终作用的条件 //本例中的泛型填写的是String,Date,最终出现字符串转日期时,该类型转换器生效 public class MyDateConverter implements Converter<String, Date> { //重写接口的抽象方法,参数由泛型决定 public Date convert(String source) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; //类型转换器无法预计使用过程中出现的异常,因此必须在类型转换器内部捕获,不允许抛出,框架无法预计此类异常如何处理 try { date = df.parse(source); } catch (ParseException e) { e.printStackTrace(); } return date; } } <!-- 自定义格数据类型转换器案例,配合requestParam12使用--> <mvc:annotation-driven conversion-service="conversionService"/> <!--自定义类型转换器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <!--覆盖类型转换器定义规则,该规则是一个set集合,对类型转换器来说是追加和替换的思想,而不是覆盖整体格式化转换器--> <property name="converters"> <set> <!--添加自定义的类型转换器,会根据定义的格式覆盖系统中默认的格式--> <!--当前案例中是将String转换成Date的类型转换器进行了自定义,所以添加后,系统中原始自带的String——>Date的类型转换器失效--> <bean class="com.itheima.converter.MyDateConverter"/> </set> </property> </bean> //数据类型转换,使用自定义类型转换器,需要配置后方可使用 //http://localhost/requestParam12?date=1999-09-09 @RequestMapping("/requestParam12") public String requestParam12(Date date){ System.out.println(date); return "page.jsp"; }