1.实现DateFormatter
//实现Converter<S,T>接口 public class DateFormatter implements Formatter<Date> { //日期类型模版:yyyy-MM-dd private String datePattern; //日期格式化对象 private SimpleDateFormat dateFormat; //构造器 通过依赖注入的日期类型创建日期格式化对象 public DateFormatter( String datePattern ) { this.datePattern = datePattern; this.dateFormat = new SimpleDateFormat(datePattern); } //显示Formatter<T>的T类型对象 @Override public String print(Date date,Locale locale) { return dateFormat.format(date); } //解析文本字符串,返回一个Formatter<T>的T类型对象 @Override public Date parse( String source, Locale locale ) throws ParseException { try { return dateFormat.parse(source); } catch (Exception e) { throw new IllegalArgumentException(); } } }
DateFormatter类实现了org.springframework.format.Formatter接口.实现了接口中的两个方法:parse方法,使用指定的Locale将一个String解析成目标T类型:print方法,用于返回T类型的字符串表示形式.DateFormatter类中使用了SimpleDateFormat对象将String转换成Date类型,日期类型模版yyyy-MM-dd之后会通过配置文件的依赖注入设置.
2.修改springmvc-config.xml
<!-- 注册格式化数据 此配置项需要位于RequestMappingHandlerAdapter之上 --> <mvc:annotation-driven enable-matrix-variables="true" conversion-service="conversionService" /> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <list> <bean class="org.fkit.formatter.DateFormatter" c:_0="yyyy-MM-dd" /> </list> </property> </bean>
Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该类既具有类型转换功能,又具有格式化功能.而FormattingConversionService
FactroyBean工厂类正是用于在Spring上下文中构造一个FormattingConversionService对象,通过这个工厂类,即可以注册自定义的转换器,还可以注册自定义的注释驱动逻辑.
以上配置使用FormattingConversionServiceFactoryBean对自定义的格式转换器DateFormatter进行了注册.FormattingConversionServiceFactoryBean类有一个属性converters,可以用他注册Converter;有一个属性fatmatters,可以用他注册Formatter.