spring_core——格式化器

格式化器的知识点有两个。内置,自定义。

自定义的实现方式有两种,实现Formatter接口,实现AnnotationFormatterFactory接口,接口的第一个泛型参数为自定义注解

1、Formatter

第一步,编写自定义Formatter接口实现类,其中print方法表示将对象转换为特定字符串,parse方法表示将特定字符串转换为对象。

第二步,注册,类似于转换器的第二种方式,设置FormattingConversionServiceFactoryBean的formatter属性。

<bean id="formatService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<!-- 配置formatter属性 -->
	<property name="formatters">
		<set>
			<!-- 自己编写的formatter接口实现类 -->
			<bean class="com.formatter.XXFormatterImpl" />
		</set>
	</property>
</bean>

2、AnnotationFormatterFactory

第一步,实现AnnotationFormatterFactory接口,接口的第一个参数为自定义注解。其中getPrinter方法返回Printer接口的实现类,getParser返回Parser接口的实现类,可以统一返回Formatter接口的实现类。

第二步,注册,同Formatter。

第三步,验证,添加在属性上即可。示例参考

3、内置

源代码如下:

public static void addDefaultFormatters(FormatterRegistry formatterRegistry) {
	// Default handling of number values, 数字
    formatterRegistry.addFormatterForFieldAnnotation(new NumberFormatAnnotationFormatterFactory());

	// Default handling of monetary values, 货币
	if (jsr354Present) {
		formatterRegistry.addFormatter(new CurrencyUnitFormatter());
		formatterRegistry.addFormatter(new MonetaryAmountFormatter());
		formatterRegistry.addFormatterForFieldAnnotation(new Jsr354NumberFormatAnnotationFormatterFactory());
	}

	// Default handling of date-time values
	// just handling JSR-310 specific date and time types,日期
	new DateTimeFormatterRegistrar().registerFormatters(formatterRegistry);
	if (jodaTimePresent) {
		// handles Joda-specific types as well as Date, Calendar, Long
		new JodaTimeFormatterRegistrar().registerFormatters(formatterRegistry);
	}
	else {
		// regular DateFormat-based Date, Calendar, Long converters
		new DateFormatterRegistrar().registerFormatters(formatterRegistry);
	}
}
posted @ 2021-05-12 10:13  蜗牛旅行1899  阅读(29)  评论(0编辑  收藏  举报