我有自定义格式化程序@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);
但是如果我尝试在另一个带有字符串值的bean中注入DebitCardNumber,
<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`
ConversionServiceFactoryBean
添加转换器并使用它
自动。FormattingConversionServiceFactoryBean
的'formatters'属性。是
有什么我从根本上失踪了吗?或者是我的理解
格式化程序是完全错误的吗?答案 0 :(得分:1)
这是注册自定义格式化程序的一种方法
<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&#34; conversionService&#34;在Abstract bean工厂中,所以它可以使用它来解析你的bean而不是属性编辑器(在Spring 3.0之前)。
所以现在为什么它适用于转换器但不适用于格式化程序,因为自定义格式化程序的ID名称与id(&#34; conversionService&#34;)正在寻找。
id的任何其他名称都不起作用,因此在选择转换器或格式化程序之间没有问题。
希望这有帮助。
格式化程序的这个例子应该可以工作。
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>