Dozer-отображение родовых списков - PullRequest
4 голосов
/ 25 мая 2011

У меня есть 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;
}

и боб, как

public class AccountBo {
    private String accountName;

    public String getAccountName() {
        return accountName;
    }

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

}

и другой боб типа

public class AccountDto {
    private String accountName;

    public String getAccountName() {
        return accountName;
    }

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

Идея теперь состоит в том, чтобы заполнить список бобами типа AccountBo и использовать Dozer для сопоставления списка, а затем заполнить его компонентами AccountDto.

    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's?

1 Ответ

2 голосов
/ 28 июня 2011

Я бы рекомендовал использовать для этого ModelMapper вместо Dozer.

Самое простое решение - создать подкласс ListWrapper, который включает AccountDto:

public class DtoListWrapper extends ListWrapper<AccountDto> {
}

Затем, когда вы перейдете к карте, ModelMapper будет знать, что ListWrapper, содержащий AccountBO, необходимо преобразовать в ListWrapper, содержащий AccountDtos.

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

Вот и все! Дополнительные примеры и документы можно найти на сайте ModelMapper:

http://modelmapper.org

...