21.16.3 转换与格式化

数字的Number类型和日期Date类型的格式化是默认安装了的,包括@NumberFormat注解和@DateTimeFormat注解。如果classpath路径下存在Joda Time依赖,那么完美支持Joda Time的时间格式化库也会被安装好。如果要注册定制的格式化器或转换器,请覆写addFormatters方法:

  1. @Configuration
  2. @EnableWebMvc
  3. public class WebConfig extends WebMvcConfigurerAdapter {
  4. @Override
  5. public void addFormatters(FormatterRegistry registry) {
  6. // Add formatters and/or converters
  7. }
  8. }

使用MVC命名空间时,<mvc:annotation-driven>也会进行同样的默认配置。要注册定制的格式化器和转换器,只需要提供一个转换服务ConversionService

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  10. <mvc:annotation-driven conversion-service="conversionService"/>
  11. <bean id="conversionService"
  12. class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  13. <property name="converters">
  14. <set>
  15. <bean class="org.example.MyConverter"/>
  16. </set>
  17. </property>
  18. <property name="formatters">
  19. <set>
  20. <bean class="org.example.MyFormatter"/>
  21. <bean class="org.example.MyAnnotationFormatterFactory"/>
  22. </set>
  23. </property>
  24. <property name="formatterRegistrars">
  25. <set>
  26. <bean class="org.example.MyFormatterRegistrar"/>
  27. </set>
  28. </property>
  29. </bean>
  30. </beans>

关于如何使用格式化管理器FormatterRegistrar,请参考 8.6.4 FormatterRegistrar SPI一节,以及FormattingConversionServiceFactoryBean的文档。