SpringMVC - 数据格式化

    xiaoxiao2021-04-14  71

    前面学习了数据类型转换数据类型转换与类型转换器。本篇博文简要描述SpringMVC的数据格式化。

    SpringMVC数据格式化主要包括两块:数值格式化与日期格式化。

    首先需要明白的是,Spring对属性对象的输入/输出进行格式化,从其本质上讲依然属于“类型转换”的范畴。


    【1】FormattingConversionService

    Spring 在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类。

    该实现类扩展了GenericConversionService,因此它既具有类型转换的功能又具有格式化的功能。

    FormattingConversionService拥有一个FormattingConversionServiceFactoryBean工厂类,后者用于在Spring上下文中构造前者。


    FormattingConversionService内部注册了两个工厂类:

    ① NumberFormatAnnotationFormatterFactory:支持对数字类型的属性使用@NumberFormat注解;

    ② JodaDateTimeFormatAnnotationFormatterFactory:支持对日期类型的属性使用@DateTimeFormat注解。

    【这下就明白了,为什么可以使用@NumberFormat和@DateTimeFormat注解进行数据格式化了】。

    装配了FormattingConversionServiceFactoryBean后,就可以在SpringMVC入参绑定及模型数据输出时使用注解驱动了。


    SpringMVC配置文件如下:

    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <!-- 配置 ConversionService 数据类型的转换和格式化 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!--注意这里是FormattingConversionServiceFactoryBean--> <property name="converters"> <set> <ref bean="employeeConverter"/> <!-- 自定义转换器 以前的一样存在 --> </set> </property> </bean>

    其实 <mvc:annotation-driven />标签会默认创建并注册一个 ConversionService,即 FormattingConversionServiceFactoryBean。

    配置完成后,就可以使Java bean 属性上面使用上述两个注解。


    【2】日期格式化和数值格式化

    示例代码如下图所示:


    下面分别简要介绍一下上述两个注解

    【1】@DateTimeFormat注解

    该注解可对java.util.Date , java.util.Calendar , java.long.Long 时间类型进行标注。

    ① pattern属性:

    类型为字符串。指定解析/格式化字段数据的模式,如“yyyy-MM-dd HH:mm:ss”。

    注意:如果是12小时制,使用 hh:mm:ss ; 如果是24小时制,使用HH:mm:ss。


    ② iso属性:

    类型为DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:

    ISO.NONE; ISO.DATE(yyyy-MM-dd); ISO.TIME(hh:mm:ss.SSSZ); ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)。

    ③ style属性

    字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式。

    S:短日期/时间格式; M:中日期/时间格式; L:长日期/时间格式; F:完整日期/时间格式; -:忽略日期或时间格式。


    【2】@NumberFormat注解

    该注解可对类似数字类型的属性进行标注,它有两个互斥的属性:

    ① style

    类型为NumberFormat.Style。用于指定样式类型,包括三种:

    Style.NUMBER(正常数字类型); Style.CURRENCY(货币类型); Style.PERCENT(百分数类型)。

    ② pattern

    类型为String,自定义样式,如pattern=”#,###”。

    转载请注明原文地址: https://ju.6miu.com/read-670621.html

    最新回复(0)