Spring MVC-Formatter数据格式化

  项目中有一些数据是有一定的格式的(如:时间,日期,货币),或同类型的数据会有不同显示格式,这时需要对数据进行格式化。Spring提供了格式化框架,位于org.springframework.format包,Formatter<T>是其中最重要的接口。

  但Formatter只能将String转换成另一种Java类型,如:String转换成Date,但不能将Long转换成Date。因此Formatter更适合 Web 层的数据转换。而Converter则可以在任意层中使用。因此 Web 层的表单数据建议选择Formatter

  注解驱动<mvc:annotation-driven />,默认创建了ConversionService实例就是一个FormattingConversionServiceFactoryBean,可以支持注解格式化的功能。

Spring自带DateFormatter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- 注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService" >
<!-- HTML 消息转换 utf-8 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

<!-- 添加Spring自带时间类型转换器 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<list>
<!-- Spring自带DateFormatter -->
<bean class="org.springframework.format.datetime.DateFormatter">
<property name="pattern" value="yyyy-MM-dd HH:mm:ss"></property>
</bean>
</list>
</property>
</bean>

自定义类型格式化

  1. 自定义String类型格式化成Date类型,实现Formatter接口。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;

    import org.springframework.format.Formatter;

    public class CustomDateFormatter implements Formatter<Date> {

    // 日期类型模板:如yyyy-MM-dd
    private String pattern;
    // 日期格式化对象
    private SimpleDateFormat dateFormat;

    public String getPattern() {
    return pattern;
    }

    public void setPattern(String pattern) {
    this.pattern = pattern;
    this.dateFormat = new SimpleDateFormat(pattern);
    }


    @Override
    public String print(Date date, Locale arg1) {
    return dateFormat.format(date);
    }

    @Override
    public Date parse(String source, Locale arg1) throws ParseException {
    Date dateTime = dateFormat.parse(source);
    return dateTime;
    }
    }
  2. springmvc.xml添加自定义的转换器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- 注解驱动 -->
    <mvc:annotation-driven conversion-service="conversionService" />

    <!-- 自定义的类型转换器 -->
    <bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="formatters">
    <list>
    <!-- 自定义格式化 -->
    <bean class="com.commons.utils.StringConverterToDate">
    <property name="pattern" value="yyyy-MM-dd HH:mm:ss"></property>
    </bean>
    </list>
    </property>
    </bean>

Formatter其它方式

  1. 通过在实体类或属性上添加注解方法,前提是配置默认的注解驱动。
  2. FormatterRegistrar
    定义一个类,实现FormatterRegistrar接口,实现registerFormatters方法,在springmvc.xml文件中添加需要注册的Formatter
作者

光星

发布于

2018-02-11

更新于

2022-06-17

许可协议

评论