2011-05-25 84 views
3

我有一个像推土机映射

public class ListWrapper<T> { 

private List<T> entries = new ArrayList<T>(); 

public List<T> getEntries() { 
    return entries; 
} 

public void setEntries(List<T> entries) { 
    this.entries = entries; 
} 

一个ListWrapper和像

public class AccountBo { 
    private String accountName; 

    public String getAccountName() { 
     return accountName; 
    } 

    public void setAccountName(String accountName) { 
     this.accountName = accountName; 
    } 

} 

一个bean和另一个豆状

public class AccountDto { 
    private String accountName; 

    public String getAccountName() { 
     return accountName; 
    } 

    public void setAccountName(String accountName) { 
     this.accountName = accountName; 
    }  
} 

现在的想法是,以填补名单使用AccountBo类型的Bean并使用Dozer来映射列表,然后填充AccountDto Beans。

AccountBo accountA = new AccountBo(); 
    accountA.setAccountName("Person A");   
    AccountBo accountB = new AccountBo(); 
    accountB.setAccountName("Person B"); 

    ListWrapper<AccountBo> listWrapperBo = new ListWrapper(); 

    listWrapperBo.getEntries().add(accountA); 
    listWrapperBo.getEntries().add(accountB); 

    ListWrapper<AccountDto> dtoList = EntityMapper.getInstance().map(listWrapperBo, ListWrapper.class); 

    List<AccountDto> listDto = dtoList.getEntries(); 

但是 - 在目标列表中的豆类类型AccountBo的....

我能做些什么来获得AccountDto的名单?

+0

我想答案已经在这里 [http://stackoverflow.com/questions/1358595/how-to-map-collections-在-推土机] [1] [1]:http://stackoverflow.com/questions/1358595/how-to-map-collections-in-dozer – jmpeace 2013-04-04 18:12:11

回答

2

我推荐使用ModelMapper而不是推土机这一点。

最简单的解决方法是创建ListWrapper的子类,包括AccountDto:

public class DtoListWrapper extends ListWrapper<AccountDto> { 
} 

然后,当你去映射,ModelMapper就知道需要包含AccountBOs的ListWrapper转换为包含AccountDtos一个ListWrapper。

ModelMapper modelMapper = new ModelMapper(); 
ListWrapper<AccountDto> listWrapper = modelMapper.map(listWrapperBo, DtoListWrapper.class); 

就是这样!更多的例子和文档,检查出ModelMapper网站:

http://modelmapper.org