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 像这样的剩余更多特殊情况。
我正在使用 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 像这样的剩余更多特殊情况。