Dozer - из списка объектов в список идентификаторов объектов

У меня есть объект домена с именем пользователя:

public class User {
    private long id;
    private String username;
    private String email;
    private List<Profile> profiles;

    // getters & setters
}

И у меня есть связанный DTO (UserDTO), который

public class UserDTO {
    private long id;
    private String username;
    private String email;
    private List<Long> profilesId;

    // getters & setters
 }

Я хотел бы использовать Dozer для преобразования из объекта домена в DTO. Класс Profile имеет свойство

Long id;

Я хочу, чтобы Dozer взял идентификатор профиля для каждого профиля в списке и сохранил его в списке DTO. Могу ли я сделать что-то подобное? Нужно ли использовать пользовательские конвертеры?

Вот мой фактический файл сопоставления

<mapping>
    <class-a>common.model.User</class-a>
    <class-b>common.model.dto.UserDTO</class-b>
    <field>
        <a>legalEntity.id</a>
        <b>legalEntityId</b>
    </field>
    <field type="one-way">
        <a>profiles.id</a>
        <b>profilesId</b>
    </field>
</mapping>

1 ответ

Решено просто добавить в исходный класс этот метод

public List<Long> getProfilesId() {
    List<Long> profilesId = new ArrayList<Long>();
    for(Profile p : this.profiles) {
        profilesId.add(p.getId());
    }
    return profilesId;
}

и в файл сопоставления

<field type="one-way">
    <a get-method="getProfilesId">profiles</a>
    <b>profilesId</b>
</field>

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

Другие вопросы по тегам