Dozer: Mapping der Klasse ohne Standardkonstruktor

8

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?

    
Sebi 15.11.2011, 08:52
quelle

4 Antworten

9

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:

%Vor%     
Strelok 15.11.2011, 09:00
quelle
4

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

    
Tomasz Nurkiewicz 15.11.2011 08:57
quelle
2

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.

    
David 14.05.2013 18:44
quelle
0

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.

    
ktorn 15.11.2011 09:03
quelle

Tags und Links