SpringMVC数据格式化

Spring使用Converter转换器进行源类型对象到目标类型对象的转换,Spring的转换器并不承担输入以及输出信息格式化的工作.如果需要转换的源类型数据是从客户端界面中传过来的,这这些数据往往拥有一定的格式,比如日期,时间,数字,货币等数据,他们都拥有一定的格式.在不同的本地话环境中,同一类型的数据还会相应的呈现不同的显示格式.
如何从格式化的数据中获取真正的数据以完成数据绑定,并将处理完成的数据输出为格式化的数据是Spring格式化框架需要解决的问题.Spring从3.0开始引入了格式化转换框架,这个框架位于org.springfeamework.format包.其中最重要的是Formatter<T>接口.
之前的Converter完成任意Object与Object之间的类型转换,而Formatter完成任意Object与String之间的类型转换,即格式化和解析,他和PropertyEditor功能类似,可以替代PropertyEditor来进行对象的解析和格式化,而且支持细粒度的字段级别的格式化/解析.Formatter只能将String转换成另一种Java类型.例如,将String转换成Date,但他不能将Long转换成Date.因此Formatter更适用于Web层的数据转换.而Converter则可以用于任意层中.因此,在SpringMVC的应用程序当中,如果想转换表单中的用户输入,这建议选择Formatter而不是Converter.
Formatter格式化转换是Spring通用的,定义在org.springframework.format包中,其而不仅仅在SpringMVC场景下使用.在org.springframework.format包中定义的接口如下:
Printer<T>接口:
格式化显示接口,其将T类型的对象根据Locale信息以某种格式进行打印显示(即返回字符串形式).该接口中定义了一个print方法,其根据本地话信息将数据输出为不同格式的T类型字符串.
String print(T object,Locale locale)
Parse<T>接口:
解析接口,其根据Locale信息解析字符串到T类型的对象,该接口中定义了一个parse方法,其参考本地化信息将一个格式化的字符串转换为T类型的对象
T parse(String text,Locale locale) throws PaeseException
Formatter<T>接口:
格式化接口,继承自Pringter<T>和Parse<T>接口,他完成T类型对象的格式化和解析功能
FormatterRegister接口:
注册格式化转换器,该接口定义了一个registerFormatters方法,其参数就是FormatterRegister对象,用于注册多个格式化转换器.
void registerFormatters(FormatterRegister register)
AnnotatinFormatterFactor<A extends Annotation>y接口:
注释驱动的字段格式化工厂,用于创建带注释的对象字段的Printer和Parser,即用于格式化和解析带注释的对象字段,该接口中定义了以下几个方法:
(1)Set<Class<?>>getFirldTypes()
注释A的应用范围,即哪些属性类可以标注A注释.
(2)Printer<?>getPrinter(A annotation,Class<?> fieldType)
根据注释A 获取特定属性类型Printer
(3)Parse<?>getParser(A annotation,Class<?>fieldType)
根据注释A获取特定属性类型的parse