通用列表的推土机映射

时间:2011-05-25 11:29:55

标签: list generics mapping dozer

我有一个类似

的ListWrapper
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;
}

和像

这样的bean
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 Bean填充。

    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();

但是 - 目标列表中的Bean类型为AccountBo ....

如何获取AccountDto列表?

1 个答案:

答案 0 :(得分:2)

我建议使用ModelMapper代替Dozer。

最简单的解决方案是创建一个ListWrapper的子类,其中包含AccountDto:

public class DtoListWrapper extends ListWrapper<AccountDto> {
}

然后当你去map时,ModelMapper会知道包含AccountBOs的ListWrap需要转换为包含AccountDtos的ListWrapper。

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

就是这样!有关更多示例和文档,请查看ModelMapper站点:

http://modelmapper.org