2012-06-29 3 views
4

Как вы изображаете одно поле в List/Collection в бульдозер?Бульдозер: Оставьте отдельное поле в списке

class SrcFoo { 
    private String id; 
    private List<SrcBar> bars; 
} 

class SrcBar { 
    private String name; 
} 

Вот мои объекты назначения:

class DestFoo { 
    private List<DestBar> destBars; 
} 

class DestBar { 
    private String fooId; // Populated by SrcFoo.id 
    private String barName; 
} 

Я хочу, чтобы все DestBar.fooId (весь список DestBars) заселяться с SrcFoo.id

Этот вопрос похож на этот публикуемую здесь ожидать Я хочу отобразить одно поле для каждого элемента в списке. Dozer: map single field to Set

Я пробовал следующее, но он только заполнил DestBar.fooId для первого элемента в списке.

<mapping> 
    <class-a>SrcFoo</class-a> 
    <class-b>DestFoo</class-b> 
    <field> 
     <a>bars</a> 
     <b>destBars</b> 
    </field> 
    <field> 
     <a>id</a> 
     <b>destBars.fooId</b> <!-- same affect as destBars[0].fooId ? --> 
    </field> 
</mapping> 

ответ

3

Dozer не поддерживает этот тип картографирования. Чтобы сделать такой тип отображения, вам нужно будет знать индексы в вашей коллекции (статическое сопоставление). Это задание для пользовательского преобразователя, создать преобразователь строки в список (из DestBar), как это:

public class YourConverter extends DozerConverter<String, List> 

Реализовать логику отображения в конверторе (Просто установите Id Строка, где это требуется) и настроить бульдозер файл, подобный этому:

<mapping> 
    <class-a>SrcFoo</class-a> 
    <class-b>DestFoo</class-b> 
    ... 
    <field custom-converter="yourpackage.YourConverter"> 
     <a>id</a> 
     <b>destBars</b> 
    </field> 
</mapping> 
Смежные вопросы