弹簧转换服务添加转换器

2022-09-03 01:27:44

我搜索了以下问题,但找不到答案。

我想通过编写实现 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>

执行上述操作时,我的应用程序初始化失败,因为我正在覆盖Bean转换服务并仅注册我的自定义转换器。

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

提前致谢。


答案 1

对于任何在问题最初发布2年多后通过Google搜索或类似搜索偶然发现这一点的人来说,通过Java Config添加转换器变得更加容易:提供了可用于指定其他自定义转换器的方法。WebMvcConfigurerAdapteraddFormatters(FormatterRegistry)


答案 2

在尝试不同的方式,甚至在一些中遵循春季源代码时,我遇到了一件有趣的事情。

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

但是,即使我以这种方式使用,在运行时,我也会得到一个异常,即没有为我的特定类型找到转换器(例如,从String到Logger)。

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

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

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

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