Mapstruct:将属性提取到对象

时间:2018-03-29 11:20:05

标签: java mapstruct

我使用Mapstruct(1.2.0.Final)来映射dto对象,我想将对象的属性提取到它自己的对象实例。

这是一个简化的例子:

@Data
public class ExternalResult {
    @JsonProperty("items")
    List<Item> items;
}

@Data
public class MyItem {
   String name;
}

现在,我想从items中提取ExternalResult,并将它们映射到MyItems列表。这是我的Mapper,我不知道在target中使用什么:

@Mapper(componentModel = "spring")
public interface GraphhopperMapper {

    @Mappings({
        @Mapping(target = "??", source="items")
    })
    List<MyItem> mapItems(ExternalResult externalResult);

}

如何实现这一目标?或者是否有一种更方便的方法来摆脱只有一个属性的(无用的)对象?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是我建议您自己实施该方法的一种情况(例如,通过使映射器成为抽象类),而不是试图让MapStruct为您执行此操作:

List<MyItem> mapItems(ExternalResult externalResult) {
    return externalResult.getItems()
        .stream()
        .map(i -> new MyItem(i.getName())
        .collect(Collectors.toList());
}

MapStruct的想法是帮助你自动完成90%的普通映射,但是让你手写这样的其他特殊情况。