Spring内置了哪些属性类型转换器?

时间:2017-02-04 14:12:00

标签: java spring

Spring框架方法PropertyResolver.getProperty(String key, Class targetType)targetType参数支持的值是什么?我正在寻找默认支持的类型列表。

以下类型显然有效:

  • Locale.class
  • int.class
  • File.class
  • URI.class

示例:

// works
Locale myLocale = propertyResolver.getProperty("my.locale", Locale.class);

我找到了这个清单: http://www.logicbig.com/how-to/spring-framework/spring-converters-list/ 但它没有列出FileURI,因此它似乎并不完整。另外,我更喜欢官方文档。

我在reference documentation chapter on type conversion中找不到任何内容。

2 个答案:

答案 0 :(得分:2)

我尝试了以下方法来解决这个问题:

在我的context.xml中定义一个bean

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"/>

然后我这样做:

public static void main(String[] args) {
        try (ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("classpath:context.xml")) {
            ConversionService service = context.getBean(ConversionService.class);
            System.out.println(service);
        }
}

我得到了

ConversionService converters =
    java.lang.Boolean -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@520a3426
    java.lang.Character -> java.lang.Number : org.springframework.core.convert.support.CharacterToNumberFactory@6b09bb57
    java.lang.Character -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5f9d02cb
    java.lang.Enum -> java.lang.String : org.springframework.core.convert.support.EnumToStringConverter@3e9b1010
    java.lang.Number -> java.lang.Character : org.springframework.core.convert.support.NumberToCharacterConverter@63753b6d
    java.lang.Number -> java.lang.Number : org.springframework.core.convert.support.NumberToNumberConverterFactory@527740a2
    java.lang.Number -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@3108bc
    java.lang.String -> java.lang.Boolean : org.springframework.core.convert.support.StringToBooleanConverter@6536e911
    java.lang.String -> java.lang.Character : org.springframework.core.convert.support.StringToCharacterConverter@370736d9
    java.lang.String -> java.lang.Enum : org.springframework.core.convert.support.StringToEnumConverterFactory@18eed359
    java.lang.String -> java.lang.Number : org.springframework.core.convert.support.StringToNumberConverterFactory@13a5fe33
    java.lang.String -> java.nio.charset.Charset : org.springframework.core.convert.support.StringToCharsetConverter@185d8b6
    java.lang.String -> java.util.Currency : org.springframework.core.convert.support.StringToCurrencyConverter@335eadca
    java.lang.String -> java.util.Locale : org.springframework.core.convert.support.StringToLocaleConverter@6c3708b3
    java.lang.String -> java.util.Properties : org.springframework.core.convert.support.StringToPropertiesConverter@eec5a4a
    java.lang.String -> java.util.TimeZone : org.springframework.core.convert.support.StringToTimeZoneConverter@61f8bee4
    java.lang.String -> java.util.UUID : org.springframework.core.convert.support.StringToUUIDConverter@6ddf90b0
    java.nio.charset.Charset -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@67784306
    java.time.ZoneId -> java.util.TimeZone : org.springframework.core.convert.support.ZoneIdToTimeZoneConverter@7b49cea0
    java.time.ZonedDateTime -> java.util.Calendar : org.springframework.core.convert.support.ZonedDateTimeToCalendarConverter@887af79
    java.util.Currency -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@210366b4
    java.util.Locale -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@6f1fba17
    java.util.Properties -> java.lang.String : org.springframework.core.convert.support.PropertiesToStringConverter@2b2948e2
    java.util.UUID -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@57536d79
    org.springframework.core.convert.support.ArrayToArrayConverter@4b4523f8
    org.springframework.core.convert.support.ArrayToCollectionConverter@3b0143d3
    org.springframework.core.convert.support.ArrayToObjectConverter@7791a895
    org.springframework.core.convert.support.ArrayToStringConverter@1f28c152
    org.springframework.core.convert.support.ByteBufferConverter@4f970963
    org.springframework.core.convert.support.ByteBufferConverter@4f970963
    org.springframework.core.convert.support.ByteBufferConverter@4f970963
    org.springframework.core.convert.support.ByteBufferConverter@4f970963
    org.springframework.core.convert.support.CollectionToArrayConverter@5a8e6209
    org.springframework.core.convert.support.CollectionToCollectionConverter@731a74c
    org.springframework.core.convert.support.CollectionToObjectConverter@67b92f0a
    org.springframework.core.convert.support.CollectionToStringConverter@6325a3ee
    org.springframework.core.convert.support.FallbackObjectToStringConverter@6e0e048a
    org.springframework.core.convert.support.IdToEntityConverter@7fac631b,org.springframework.core.convert.support.ObjectToObjectConverter@5b87ed94
    org.springframework.core.convert.support.MapToMapConverter@369f73a2
    org.springframework.core.convert.support.ObjectToArrayConverter@3a5ed7a6
    org.springframework.core.convert.support.ObjectToCollectionConverter@2b9627bc
    org.springframework.core.convert.support.ObjectToOptionalConverter@5bc79255
    org.springframework.core.convert.support.StreamConverter@65e2dbf3
    org.springframework.core.convert.support.StreamConverter@65e2dbf3
    org.springframework.core.convert.support.StreamConverter@65e2dbf3
    org.springframework.core.convert.support.StreamConverter@65e2dbf3
    org.springframework.core.convert.support.StringToArrayConverter@7d907bac
    org.springframework.core.convert.support.StringToCollectionConverter@1d16f93d

这些是我在问题的评论部分提到的DefaultConversionService中提供的默认转换器。

我注意到有一个FallbackObjectToStringConverter几乎可以将任何内容转换为String。因此URIFileString始终有效。相反的情况似乎由ObjectToObjectConverter处理,它足够聪明,可以使用构造函数从String表示中获取对象。

我认为根据您使用的库和Spring依赖项,可能会在这里注册更多转换器。

答案 1 :(得分:1)

如果您查看PropertyResolver Java 文档,您会看到它有一个直接已知子接口的列表。一个这样的接口是ConfigurablePropertyResolver接口。如果您继续学习ConfigurablePropertyResolver Java 文档,您会看到他们谈论ConversionService界面。然后,您将发现DefaultConversionService是实现ConversionService的接口之一,并具有以下 Java 文档描述:

  

默认配置的GenericConversionService的特化   适用于大多数环境的转换器。专为直接而设计   实例化但也暴露了静态   addDefaultConverters(ConverterRegistry)实用程序方法,用于临时使用   针对任何ConverterRegistry实例。

看起来这是他们配置所有默认转换器的地方。如果您查看DefaultConversionService的{​​{3}},您会发现它在其构造函数中调用了addDefaultConverters方法。此方法似乎设置了默认情况下可用的所有转换器。

注意这个答案的目的是演示如何使用源代码组合浏览可用的 Java 文档,以获取他们正在查找的信息对于。