我使用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);
}
如何实现这一目标?或者是否有一种更方便的方法来摆脱只有一个属性的(无用的)对象?
提前致谢。
答案 0 :(得分:1)
这是我建议您自己实施该方法的一种情况(例如,通过使映射器成为抽象类),而不是试图让MapStruct为您执行此操作:
List<MyItem> mapItems(ExternalResult externalResult) {
return externalResult.getItems()
.stream()
.map(i -> new MyItem(i.getName())
.collect(Collectors.toList());
}
MapStruct的想法是帮助你自动完成90%的普通映射,但是让你手写这样的其他特殊情况。