项目中有一些数据是有一定的格式的(如:时间,日期,货币),或同类型的数据会有不同显示格式,这时需要对数据进行格式化。Spring提供了格式化框架,位于org.springframework.format
包,Formatter<T>
是其中最重要的接口。
但Formatter
只能将String
转换成另一种Java
类型,如:String转换成Date,但不能将Long转换成Date。因此Formatter更适合 Web 层的数据转换。而Converter则可以在任意层中使用。因此 Web 层的表单数据建议选择Formatter。
注解驱动<mvc:annotation-driven />
,默认创建了ConversionService
实例就是一个FormattingConversionServiceFactoryBean
,可以支持注解格式化的功能。
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" > <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>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <list> <bean class="org.springframework.format.datetime.DateFormatter"> <property name="pattern" value="yyyy-MM-dd HH:mm:ss"></property> </bean> </list> </property> </bean>
|
自定义类型格式化
- 自定义
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> {
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; } }
|
- 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>
|
- 通过在实体类或属性上添加注解方法,前提是配置默认的注解驱动。
FormatterRegistrar
定义一个类,实现FormatterRegistrar
接口,实现registerFormatters
方法,在springmvc.xml
文件中添加需要注册的Formatter
。