2016-06-13 11 views
0

Ich habe einen benutzerdefinierten Formatierer @Component class DebitCardNumberFormatter implements Formatter<DebitCardNumber>{...} ich hinzugefügt haben, diese Formatierer zum FormattingConversionServiceFactoryBean vonBenutzerdefinierte Formatierer nicht registriert - ConversionNotSupportedException: Frühling

<bean id="formattingConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
     <property name="formatters"> 
      <set> 
       <ref bean="debitCardNumberFormatter"/> 
      </set> 
     </property> 
</bean> 

Nun, wenn ich den folgenden Code explizit ausgeführt, es funktioniert einwandfrei und die Zeichenfolge wird DebitCardNumber

,
DebitCardNumber debitCardNumber=formattingConversionService.convert("1234-3242 
-4533-3432",DebitCardNumber.class); 

Aber wenn ich versuche, eine DebitCardNumber in einer anderen Bohne mit einem String-Wert zu injizieren,

<bean id="cardDetails" class="com.amudhan.springcore.formatter.CardDetails"> 
     <property name="debitCardNumber" value="1234-3242-4533-3432"></property> 
</bean> 

Der Container löst ConversionNotSupportedException aus.

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` 
  • Ich lese die Frühlings-Dokumentation und die APIs zu üben. Was fehlt mir hier ?
  • Zuvor, als ich 'Converter' erstellt habe, habe ich 'converters' Eigenschaft von ConversionServiceFactoryBean verwendet, um diesen Konverter hinzuzufügen und ihn automatisch zu verwenden.
  • In der gleichen Weise habe ich versucht, den Formatierer mit der 'Formatierer' Eigenschaft FormattingConversionServiceFactoryBean hinzuzufügen. Ist da etwas, was ich grundsätzlich vermisse? Oder ist mein Verständnis von Formattern einfach falsch?
  • Wenn es eine Ausnahme auslöst, wenn ich Spring zu debugCardNumber es im ApplicationContext verwende, wie funktioniert es richtig, wenn ich die Konvertierungsmethode explizit aus der App aufrufen? Sogar die Bohnen werden korrekt erstellt, wenn ich nachschlage.

Antwort

0

Dies ist ein Weg, um Ihre benutzerdefinierten Formatierer

<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> 

aktualisieren

Ordnung nach einem Blick wenig tiefer in den Code zu registrieren. Daher sucht spring in Conversion Service Bean in Ihrem Anwendungskontext nach der Konvertierungsdienst-Bean in der Abstract-Bean-Factory, damit es Ihre Bean statt Property-Editoren analysieren kann (vor Spring 3.0).

Also jetzt, warum es mit Konvertern aber nicht Formatierer gearbeitet hat, weil Ihr ID-Name für benutzerdefinierte Formatierer nicht mit der ID ("conversionService") Frühjahr gesucht hat.

Jeder andere Name für ID wird nicht funktionieren und so ist es kein Problem zwischen der Wahl Konverter oder Formatierer.

Hoffe, das hilft.

Dieses Beispiel mit Formatierer sollte funktionieren.

<bean id="conversionService" 
      class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
     <property name="formatters"> 
      <set> 
       <ref bean="debitCardNumberFormatter"/> 
      </set> 
     </property> 
    </bean> 
+0

Ja. Aber warum funktioniert es nicht so, wie ich es gemacht habe, als die Konverter gut funktionierten? Fehle ich etwas? –

+0

Können Sie ein Arbeitsbeispiel hinzufügen? – Veeram

+0

Alles gleich wie in der oben angegebenen XML-Konfiguration, außer dass ich jetzt "ConversionServiceFactoryBean" anstelle von "FormattingConversionServiceFactoryBean" mit der Eigenschaft converters anstelle der formatter -Eigenschaft habe. Ich habe einen benutzerdefinierten Konverter anstelle eines Formatierers wie in der Frage erwähnt injiziert. –

Verwandte Themen