Saya memiliki pemformat khusus @Component class DebitCardNumberFormatter implements Formatter<DebitCardNumber>{...}
Saya telah menambahkan pemformat ini ke FormattingConversionServiceFactoryBean
oleh
<bean id="formattingConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>
Sekarang ketika saya secara eksplisit menjalankan kode berikut, itu berfungsi dengan benar dan string menjadi DebitCardNumber,
DebitCardNumber debitCardNumber=formattingConversionService.convert("1234-3242
-4533-3432",DebitCardNumber.class);
Tetapi jika saya mencoba menyuntikkan DebitCardNumber di kacang lain dengan nilai string,
<bean id="cardDetails" class="com.amudhan.springcore.formatter.CardDetails">
<property name="debitCardNumber" value="1234-3242-4533-3432"></property>
</bean>
Wadah melempar 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`
- Saya membaca dokumentasi Spring dan mempraktikkan API. Apa yang kulewatkan di sini ?
- Sebelumnya ketika saya membuat 'Converter's, saya menggunakan properti 'converter' dari
ConversionServiceFactoryBean
untuk menambahkan konverter itu dan menggunakannya secara otomatis. - Dengan cara yang sama saya telah mencoba menambahkan formatter dengan menggunakan properti 'formatters' dari
FormattingConversionServiceFactoryBean
. Adalah ada sesuatu yang pada dasarnya saya lewatkan? Atau Apakah pemahaman saya? dari Formatters jelas salah? - Jika It melempar pengecualian ketika saya menggunakan pegas untuk debitCardNumber di applicationContext, kenapa itu berfungsi dengan benar ketika saya memanggil metode konversi secara eksplisit dari aplikasi? Bahkan kacang dibuat dengan benar ketika saya memeriksa.
1 menjawab
Ini adalah salah satu cara untuk mendaftarkan formatter kustom Anda
<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>
Perbarui
Baiklah setelah melihat sedikit lebih dalam ke dalam kode. Jadi pegas mencari kacang layanan konversi dalam konteks aplikasi Anda dengan id "conversionService" di pabrik kacang Abstrak sehingga dapat menggunakannya untuk mengurai kacang Anda alih-alih editor properti (sebelum Spring 3.0).
Jadi sekarang mengapa ini bekerja dengan konverter tetapi bukan pemformat karena nama id Anda untuk pemformat khusus tidak cocok dengan pegas id("conversionService") yang dicari.
Nama lain untuk id tidak akan berfungsi sehingga tidak menjadi masalah antara memilih konverter atau pemformat.
Semoga ini membantu.
Contoh ini dengan formatter seharusnya berfungsi.
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<ref bean="debitCardNumberFormatter"/>
</set>
</property>
</bean>