Mapstruct:将属性提取到对象

Mapstruct: Extract attribute to an object

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

这是一个简化的例子:

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

@Data
public class MyItem {
   String name;
}

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

中使用什么
@Mapper(componentModel = "spring")
public interface GraphhopperMapper {

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

}

如何实现?或者有没有更方便的方法来摆脱只有一个属性的(无用的)对象?

提前致谢。

这是我建议您自己实现该方法的情况之一(例如,通过使映射器成为抽象的 class),而不是让 MapStruct 为您做这件事:

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

MapStruct 的想法是帮助您自动化 90% 的琐碎映射,但让您 hand-write 像这样的剩余更多特殊情况。