Нетривиальные отображения Dozer

Я изо всех сил пытаюсь заставить Dozer изгибаться к моему желанию для чего-то, что я чувствую, должно быть довольно простым. У меня есть две подобных модели, между которыми я хочу отобразиться, однако у каждого есть 'более глубокая' иерархия, чем другой, и это вызывает меня проблемы при контакте с наборами. Рассмотрите следующие классы:

Исходные классы:

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

class NameGroup {
    private List names;
    // Setters/Getters
}

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

Целевые классы:

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

class BarNames {
    private List names;
    // Setters/Getters
}

Теперь я хотел бы следующие односторонние отображения:

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

Но мне затем нужно:

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

Так каждый Name экземпляр в Foo.nameGroup.names должен привести к a String быть добавленным к BarNames.names список. Действительно ли это возможно?

5
задан teabot 16 December 2009 в 18:46
поделиться

1 ответ

Это можно легко сделать с помощью Dozer, если класс "Имя" содержит конструктор String.

Цитата из документов Dozer (http://dozer.sourceforge.net/documentation/simpleproperty.html):

Осуществляется закрытие типа данных. автоматически с помощью Dozer mapping Мотор. В настоящее время Dozer поддерживает следующие типы преобразования: (эти все двунаправленные...

...

Строка к Тип Сложный, если Тип Сложный содержит конструктор String

...

Я протестировал его с вашими классами, как было сказано выше (я застрял с той же самой проблемой), и он работает отлично. Вот отображение, которое я использовал:

<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>
5
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: