Blog

Dozer Mapping

Amit Jain

Aktualisiert Dezember 3, 2025
4 Minuten

Dozer ist ein Java Bean-zu-Java Bean-Mapper, der rekursiv Daten von einem Objekt in ein anderes kopiert. Typischerweise sind diese Java Beans von verschiedenen komplexen Typen. In diesem Blog erfahren Sie, wie Sie eine Java Bean in eine andere Java Bean konvertieren können, indem Sie die Kontextzuordnung [Dozer-Mappings] verwenden. Außerdem können Sie einen Variablentyp in einen anderen Variablentyp konvertieren, indem Sie ihn in einer XML-Datei definieren.

Dozer unterstützt verschiedene Arten von Mappings:

  1. Einfaches Zuordnen von Eigenschaften
  2. Komplexe Typenzuordnung
  3. Bidirektionales Mapping
  4. implizit-explizite Zuordnung
  5. Rekursive Mappings Dozer unterstützt Mappings für Sammlungsattribute, die für Mappings auf Elementebene erforderlich sind. Oftmals benötigen wir ein kontextbasiertes Mapping mit Dozer, um die Anzahl der konvertierten Felder zu kontrollieren. Nehmen wir ein Beispiel für die Konvertierung SourceClass zu DestinationClass. [java]public class SourceClass { private String sourceStringForInteger; private String sourceStringForLong; private String sourceStringForint; private String sourceStringForString; private List sourceCol; ... } public class DestinationClass { private Integer sourceStringForInteger; private Long sourceStringForLong; private int sourceStringForint; private String sourceStringForString; private List destCol; ... }[/java] Sie sehen, dass SourceClass die Variable sourceCol vom Typ List enthält, die wir in der DestinationClass in die Variable destCol vom Typ List umwandeln. Hier ist sourceCol ein Objekttyp von SourceChildClass und destCol ist ein Objekt von DestinationChildClass. [java] public class SourceChildClass { private String prop1; private String prop2; private String prop3; ... } public class DestinationChildClass { private Integer prop1; private Integer prop2; private Integer prop3; ... }[/java] Anwendungsfall 1 [Einfache Konvertierung eines Quellobjekts in ein Zielobjekt] Wir werden das Attribut map-id verwenden, um die Fälle zu benennen. In einem Serviceaufruf/einer Konvertierung wollen wir die SourceClass in die DestinationClass konvertieren (sagen wir FallA) [xml] package.SourceClass package.DestinationClass

sourceCol destCol package.SourceChildClass package.DestinationChildClass

[/xml] Bei dieser Zuordnung

  1. Tag <Klasse-a> Wert Quelle Klasse
  2. Tag <Klasse-b> Wert Ziel
  3. Tag <eine> Wertesammlungsvariable in der Quellklasse
  4. Tag <b> Wertesammlungsvariable in der Zielklasse
  5. Tag <a-hint> Objekttyp der Sammlung definiert als Tag <einen> Wert.
  6. Tag <b-Hinweis> Objekttyp der Sammlung definiert als Tag <b> Wert.
  7. Andere SourceClass-Felder werden implizit in DestinationClass-Felder konvertiert, unabhängig von ihren Datentypen, wie z.B. sourceStringForInteger, eine Variable vom Typ String in SourceClass, Dozer wird diese Variable in DestinationClass in den Typ Integer konvertieren. Nehmen wir an, wir möchten die Variable sourceStringForInteger ausschließen, indem wir SourceClass definieren (z.B. FallB). [xml] package.SourceClass package.DestinationClass

sourceCol destCol package.SourceChildClass package.DestinationChildClass [/xml] [xml] sourceStringForInteger sourceStringForInteger

[/xml] In dieser Zuordnung Fügen Sie ein Tag hinzu und definieren Sie die Variablennamen, die Sie ausschließen möchten. Sehen wir uns an, wie der Code aussieht. sourceClass ist ein Objekt vom Typ SourceClass , das in DestinationClass konvertiert werden muss. [java]DestinationClass destinationClass = (DestinationClass) mapper.map (sourceClass, DestinationClass.class, "caseA");[/java] Die Definition von mapper erfolgt wie bean in Spring. Hier übergeben wir ein drittes String-Argument, das den Namen des Mappings angibt, das vom Dozer verwendet werden soll. Dieses Argument wird für die Konvertierung von SourceClass nach DestinationClass verwendet. Bei der umgekehrten Konvertierung, d.h. der Konvertierung von DestinationClass nach SourceClass, müssen wir PRIME an den Namen des Mappings anhängen. SourceClass sourceClass = (SourceClass) mapper.map (destinationClass, SourceClass.class, "caseAPRIME"); Anwendungsfall 2 [Komplexe Konvertierung von Quellobjekt in Zielobjekt] Betrachten wir ein komplexes Szenario. Angenommen, wir möchten die Variable prop1 , die in SourceChildClass definiert ist, als Konverter für caseA ausschließen. Dazu müssen wir dem Dozer sagen, dass er bei der Konvertierung des Objekts, das zur Sammlung gehört, eine andere Zuordnung verwenden soll. Wir könnten diese Zuordnung collCaseA nennen, und im Feld-Tag verwenden wir map-id, um den Namen anzugeben. [xml] package.SourceClass package.DestinationClass

sourceCol destCol package.SourceChildClass package.DesctinationChildClass

[/xml] [xml]

package.SourceChildClass package.DestinationChildClass

prop1 prop1

[/xml] In diesem Mapping wird die Änderung von Usecase-1, CaseA vorgenommen, indem ein neues Mapping hinzugefügt wird, um den Ausschluss eines bestimmten Feldes von der Konvertierung der Sammlung unter < mapping map-id="collCaseA"> tag zu definieren. In ähnlicher Weise wollen wir für CaseB die Variable prop2 ausschließen, die in SourceChildClass definiert ist, also nennen wir sie collCaseB. [xml] package.SourceClass package.DestinationClass

sourceCol destCol package.SourceChildClass package.DestinationChildClass

sourceStringForInteger sourceStringForInteger

[/xml] [xml] package.SourceChildClass package.DestinationChildClass

prop2 prop2

[/xml] In dieser Zuordnung wird die Änderung von Usecase-1, CaseB vorgenommen, indem eine neue Zuordnung hinzugefügt wird, um ein bestimmtes Feld von der Sammelkonvertierung auszuschließen, und zwar unter <mapping map-id="collCaseB"> tag. Der Konvertierungscode bleibt für Usecase 2 der gleiche wie in Usecase 1. Fazit: Sie haben verschiedene Fälle von kontextbasierter Mapping-Konvertierung gesehen. Weitere Informationen finden Sie in den folgenden Ressourcen. - Deep Mappings - dozer.sourceforge.net/ Wenn Sie eine spezielle Frage haben, kommentieren Sie bitte. Ich werde versuchen, Ihnen eine Antwort zu geben.

Verfasst von

Amit Jain

Contact

Let’s discuss how we can support your journey.