Spring ConversionService添加转换器

nik*_*tsa 14 java spring type-conversion

我搜索了下面的问题,但找不到答案.

我想通过编写实现org.springframework.core.convert.converter.Converter的自定义转换器来使用spring的转换服务.

然后我添加我的自定义转换器如下:

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean id="StringToLoggerConverter" class="com.citi.spring.converter.LoggerConverter" />
       </list>
   </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

在执行上述操作时,我的应用程序初始化失败,因为我重写了bean conversionService并仅注册了我的自定义转换器.

我怎么能不覆盖conversionService并只将我的自定义转换器添加到转换器列表中,同时保留现有转换器?

提前致谢.

小智 12

对于那些现在通过谷歌搜索或类似问题最初发布后2年以上发现的人,通过Java Config添加转换器变得更加容易:WebMvcConfigurerAdapter提供了addFormatters(FormatterRegistry)可用于指定其他自定义转换器的方法.


nik*_*tsa 5

在尝试不同的方法,甚至在某些方法中遵循 spring 源代码时,我遇到了一个有趣的事情。

我发现使用 conversionService 而不用自定义转换器覆盖现有转换器的唯一方法是扩展或重新实现 conversionService,调用超类的 afterPropertiesSet() 方法来注册默认转换器,然后添加自定义转换器。

但即使我使用这种方式,在运行时我也会遇到一个异常,即没有找到适合我的特定类型的转换器(例如从字符串到记录器)。

这引发了我的兴趣,我跟踪了 spring 源代码来找出原因,我意识到 spring 正在尝试找到一个使用 PropertyEditor 注册的自定义转换器。我不知道为什么会发生这种情况。我必须在这里补充一点,我的应用程序没有使用 spring mvc,并且 conversionService 可能需要以某种方式注册,但我没有这样做。

最后,我通过使用属性编辑器注册自定义转换器解决了问题。该文档可以作为参考:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html

我很想知道为什么 Spring 没有在 conversionService 的注册表中找到我注册的自定义转换器(或者至少为什么 spring 没有查看该注册表来查找自定义转换器)。我是否缺少任何配置?