Mapstruct的源是列表,目标是直接属性

时间:2018-08-22 12:43:18

标签: java mapping mapstruct

我想将UserDTO和UserGroupDTO映射为其中用户具有地址的列表,其中用户具有所有地址字段,而用户组具有单独的地址字段。请让我知道如何映射这些字段。

1 个答案:

答案 0 :(得分:0)

目前对此没有官方支持,但是有一种使用 expressions 的解决方法,如故障单中所述:https://github.com/mapstruct/mapstruct/issues/1321#issuecomment-339807380

这将适合您的情况:

@Mapper
public abstract class UserDTOMapper {

    @Mapping( expression = "java(userDTO.getAddress().get(0))", target = "street")
    @Mapping( expression = "java(userDTO.getAddress().get(1))", target = "zipCode")
    @Mapping( expression = "java(userDTO.getAddress().get(2))", target = "country")
    abstract public UserGroupDTO mapTo(UserDTO userDTO);

}

但是您必须确保实现为List的address属性将始终包含相同数量的字段并且顺序正确,否则基于list索引的映射将无法正常工作。