推土机 - 从实体列表到实体ID列表

时间:2015-09-17 13:38:55

标签: java spring dto dozer dto-mapping

我有一个名为User的域对象:

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为列表中的每个配置文件获取配置文件的id并将其保存在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 个答案:

答案 0 :(得分:-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使用哪种方法进行转换。