Vor allem ... Ich bin im Frühjahr relativ neu, benutze Frühling 3.x und ich mag nicht XML-Konfigurationsdateien ... Ich möchte nicht für jedes Refactoring, das ich in XML-Datei für Updates laufen. .
Ich versuche, Spring auf eine Weise zu konfigurieren, dass für jede Anfrage, wenn ich @ RequestParam / @ RequestBody / @ PathVariable usw. mit einem anderen Typ als String in meinen hadlers habe, Spring die Werte korrekt in diesen Typ konvertiert oder setzt null zu den Argumenten des Handlers (ich verwende niemals primitive Typen in Handler-Argumenten). So weit so gut ...
Bis jetzt habe ich alle converter / converterFactory-Klassen wie folgt registriert:
%Vor%Gibt es eine Möglichkeit, Konverter mit Anmerkungen zu registrieren?
Kann irgendetwas (oder nur einfaches Zeug) über Spring-XML nur mit Anmerkungen gemacht werden und die XML-Konfiguration ein für allemal loswerden? ... und wie?
Spring verfügt nicht über Annotationsunterstützung für Konverter, Sie können jedoch eigene erstellen.
Alles, was Sie brauchen, ist eine benutzerdefinierte Annotation (nennen Sie es @AutoRegistered
) und eine Art Converter / Formatter Registrar (implementiert FormatterRegistrar
), das alle Spring Beans mit dieser @AutoRegistered
Annotation registriert (und einige XML, um diesen Registrierungsdienst zu registrieren).
Dann müssen Sie Ihren Converter mit dieser Anmerkung (und einigen anderen Anmerkungen, um es zu machen) kommentieren eine Frühlingsbohne) und das ist alles.
@AutoRegistered
Annotation:
Registrierungsdienst:
%Vor%XML-Konfiguration für den Registrar:
%Vor% BTW für Ihren enum Konverter brauchen Sie kein ConversionFactory
- ein einfacher Konverter ist genug:
Zuerst müssen Sie eine Annotation definieren: TypeConverter
%Vor%Dann müssen Sie den Konvertierungsservice registrieren und alle Beans mit der Anmerkung hinzufügen. Dies wird mit dem folgenden Postprozessor durchgeführt:
%Vor%Wenn Sie weitere Informationen benötigen, werfen Sie einen Blick auf diesen Blogeintrag
Automatische Registrierung von Converter-Beans wird auch von Spring Boot bereitgestellt, wenn @EnableAutoConfiguration
ist aktiviert - siehe Spring Boot-Funktionen . Es scheint, dass keine zusätzlichen Annotationen (abgesehen von der Markierung jeder Converter-Bean als @Component
) dafür erforderlich sind.
Der Ansatz von @Ralph ist ordentlich, ich habe seine Antwort gegeben. Lassen Sie mich auch einen alternativen Ansatz empfehlen, der @Configuration
verwendet support - im Wesentlichen eine Möglichkeit, Spring-Beans mit Java anstelle von XML zu konfigurieren. Mit diesem Ansatz können die Nachrichtenkonverter auf diese Weise registriert werden:
Mit Spring MVC 3.2 können Sie eine Konvertierungsdienstklasse erstellen, die den DefaultFormattingConversionService z. B.
erweitertApplicationConversionService.java
%Vor%und spezifizieren Sie es in der Frühlingskonfiguration, z. B.
Dispatcher-Servlet.xml
%Vor%Tags und Links xml spring spring-mvc converter annotations