我正在使用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);

}


如何做到这一点?还是有一种更方便的方法来摆脱仅具有一个属性的(无用)对象?

提前致谢。

最佳答案

在这种情况下,我建议您自己自行实现该方法(例如,通过将mapper设为抽象类),而不是尝试让MapStruct为您完成此方法:

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


MapStruct的想法是帮助您自动完成90%的平凡映射,但让您手写其余的特殊情况。

09-29 20:58