我正在使用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%的平凡映射,但让您手写其余的特殊情况。