我有一个自定义格式化程序 @Component class DebitCardNumberFormatter implements Formatter<DebitCardNumber>{...}
我已将此格式化程序添加到 FormattingConversionServiceFactoryBean
通过
<bean id="formattingConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>
现在,当我显式运行以下代码时,它可以正常工作并且字符串变为 DebitCardNumber,
DebitCardNumber debitCardNumber=formattingConversionService.convert("1234-3242
-4533-3432",DebitCardNumber.class);
但是如果我尝试将 DebitCardNumber 注入(inject)另一个带有字符串值的 bean 中,
<bean id="cardDetails" class="com.amudhan.springcore.formatter.CardDetails">
<property name="debitCardNumber" value="1234-3242-4533-3432"></property>
</bean>
容器抛出 ConversionNotSupportedException。
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type [java.lang.String] to required type [com.amudhan.springcore.formatter.DebitCardNumber] for property 'debitCardNumber'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.amudhan.springcore.formatter.DebitCardNumber] for property 'debitCardNumber': no matching editors or conversion strategy found`enter code here`
- 我正在阅读 Spring 文档并练习 API。什么 我在这里失踪了吗?
- 之前,当我创建“转换器”时,我使用了“转换器”属性
的
ConversionServiceFactoryBean
添加该转换器并使用它 自动。 - 以同样的方式,我尝试使用添加格式化程序
FormattingConversionServiceFactoryBean
的“格式化程序”属性。是 有什么我从根本上缺少的吗?或者是我的理解 格式化程序是完全错误的吗? - 如果当我在 applicationContext 中使用 spring 来 debitCardNumber 时它抛出异常,那么当我从应用程序显式调用转换方法时它如何正常工作?当我检查时,甚至 bean 也被正确创建。
最佳答案
这是注册自定义格式化程序的一种方法
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>
更新
好吧,在深入研究代码之后。因此,Spring 正在您的应用程序上下文中寻找抽象 bean 工厂中 id 为“conversionService”的转换服务 bean,以便它可以使用它来解析您的 bean,而不是属性编辑器(在 Spring 3.0 之前)。
那么现在为什么它适用于转换器而不是格式化程序,因为自定义格式化程序的 id 名称与 spring 正在寻找的 id("conversionService") 不匹配。
任何其他名称的 id 都不起作用,因此选择转换器或格式化程序之间不是问题。
希望这有帮助。
这个带有格式化程序的示例应该可以工作。
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>
关于java - 自定义格式化程序未注册 - ConversionNotSupportedException : Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37796517/