Frage

Ich kämpfe darum zu bekommen Dozer Zu meinem Willen zu beugen, für etwas, von dem ich glaube, dass es ganz einfach sein sollte. Ich habe zwei ähnliche Modelle, die ich abbilden möchte, aber eine hat eine "tiefere" Hierarchie als die andere, und dies verursacht mir Probleme beim Umgang mit Sammlungen. Betrachten Sie die folgenden Klassen:

Quellklassen:

class Foo {
    String id;
    NameGroup nameGroup; 
    // Setters/Getters
}

class NameGroup {
    private List<Name> names;
    // Setters/Getters
}

class Name {
    private String nameValue;
    // Setters/Getters
}

Zielkurse:

class Bar {
    private String barId;
    private BarNames barNames;
    // Setters/Getters
}

class BarNames {
    private List<String> names;
    // Setters/Getters
}

Jetzt möchte ich die folgenden Einweg-Zuordnungen:

Foo.id -> Bar.barId // Simple enough

Aber dann brauche ich:

Foo.nameGroup.names.nameValue -> Bar.barNames.names

Also jeder Name Instanz in Foo.nameGroup.names sollte zu einem führen String zu der hinzugefügt werden BarNames.names aufführen. Ist das möglich?

War es hilfreich?

Lösung

Dies kann leicht mit Dozer erfolgen, solange Ihre "Name" -Klasse einen String -Konstruktor enthält.

Ein Zitat aus den Dozer -Dokumenten (http://dozer.sourceforge.net/documentation/simpleProperty.html):

Die Datentyp -Deckung wird automatisch von der Dizer Mapping -Engine durchgeführt. Derzeit unterstützt Dozer die folgenden Arten von Conversions: (Dies sind alle bidirektional)

...

String zu komplexer Typ, wenn der komplexe Typ einen String -Konstruktor enthält

...

Ich habe dies mit Ihren Klassen wie oben getestet (ich war mit dem gleichen Problem festgefahren) und es funktioniert perfekt. Hier ist die Zuordnung, die ich verwendet habe:

<mapping>
  <class-a>com.test.bar.Bar</class-a>
  <class-b>com.test.foo.Foo</class-b>
  <field>
    <a>barId</a>
    <b>id</b>
  </field>
  <field>
    <a>barNames.names</a>
    <b>nameGroup.names</b>
    <a-deep-index-hint>java.lang.String</a-deep-index-hint>
    <b-deep-index-hint>com.test.foo.Name</b-deep-index-hint>
  </field>
</mapping>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top