使用Formatter格式化数据

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.