Sagen wir, ich möchte die folgenden zwei Klassen zuordnen:
%Vor% Wenn Dozer die folgende Konvertierung durchführen soll: dozerBeanMapper.map( a, B.class );
Ich erhalte einen Fehler wegen des fehlenden Standardkonstruktors der Klasse B
.
Was ist der beste Weg, um dieses Problem zu lösen? Verwenden Sie einen benutzerdefinierten Konverter?
Wenn Klasse B nicht Ihre API ist und Sie keine Kontrolle über sie haben und Sie trotzdem die Eigenschaft Mitglied zuordnen möchten, können Sie eine benutzerdefinierte Bean-Factory verwenden kann vielleicht einen Standardwert an den Costruktor übergeben:
%Vor% Ihre Factory implementiert org.dozer.BeanFactory
interface:
Von Dozer FAQ :
Einige meiner Datenobjekte haben keine öffentlichen Konstruktoren. Unterstützt Dozer diesen Anwendungsfall?
Ja. Beim Erstellen einer neuen Instanz des Zielobjekts, wenn kein öffentlicher Argumentenkonstruktor gefunden wird, erkennt Dozer automatisch einen privaten Konstruktor und verwendet diesen. Wenn das Datenobjekt keinen privaten Konstruktor hat, können Sie eine benutzerdefinierte BeanFactory zum Erstellen neuer Instanzen des Zielobjekts angeben.
Hier finden Sie eine Dokumentation der benutzerdefinierten Bean Factories
Ich bin auf dieses Problem gestoßen, als ich versucht habe, ein java.util.Locale
zuzuordnen. Um mein Problem zu lösen, habe ich folgendes gemacht:
Ich habe eine Klasse mit dem Namen LocaleMapper erstellt, die mit dumb LocaleToLocaleConversion
übereinstimmt %Vor%Dann habe ich die Mapping-XML des Projekts geändert:
%Vor%Nun kann ich meinen Klassen, die mit Dozer verknüpft sind, Gebietsschema-Objekte hinzufügen. Mein Dozer-Wissen ist etwas begrenzt, daher kann ich die detaillierten Details nicht erklären, wie es unter der Haube funktioniert, aber es hat für mein Projekt funktioniert.
Sie können entweder einen Standardkonstruktor für B erstellen oder alternativ eine benutzerdefinierte BeanFactory.html verwenden, sodass Dozer es kann Erstellen Sie die benötigte Instanz.