基于类型的 MapStruct 映射器
MapStruct mapper based on type
考虑以下简化结构(每个结构都有一个 DO 和一个 DTO):
Component {
UUID id;
String name;
}
MotherboardComponent extends Component {
String type;
List<Component> components;
}
对于这两者,我都有一个映射器在 DO 和 DTO 之间进行映射,但是,我遇到了一个问题,我真的不知道如何处理它。如果对于列表中的 MotherboardComponent
我有另一个 MotherboardComponent
,生成的映射对象是 ComponentDO
而不是 MotherboardComponentDO
.
如果对象实际上是扩展对象而不是基础对象,我如何告诉 MapStruct 使用 MotherboardComponentMapper
内部的 MotherboardComponentMapper
?
谢谢
MapStruct 在运行时不执行任何操作。它曾经在编译时知道类型。
为了解决这个问题,您将不得不帮助它:
例如
@Mapper
public abstract class MotherboardComponentMapper {
public abstract MotherboardComponentDO map(MotherboardComponent component);
public ComponentDO map(Component component) {
if (component instanceof MotherboardComponent) {
return map((MotherboardComponent) component);
}
return mapAsComponentDO(component);
}
@Named("asComponentDO")
protected abstract ComponentDO mapAsComponentDO(Component component);
}
由于我们用 @Named
标记了 mapAsComponentDO
MapStruct 将不会处理它是从 Component
映射到 ComponentDO
的可能方法,它将使用 map(Component)
方法。
在 MapStruct 问题跟踪器中存在支持此类 down cast mapping 的未决问题。
考虑以下简化结构(每个结构都有一个 DO 和一个 DTO):
Component {
UUID id;
String name;
}
MotherboardComponent extends Component {
String type;
List<Component> components;
}
对于这两者,我都有一个映射器在 DO 和 DTO 之间进行映射,但是,我遇到了一个问题,我真的不知道如何处理它。如果对于列表中的 MotherboardComponent
我有另一个 MotherboardComponent
,生成的映射对象是 ComponentDO
而不是 MotherboardComponentDO
.
如果对象实际上是扩展对象而不是基础对象,我如何告诉 MapStruct 使用 MotherboardComponentMapper
内部的 MotherboardComponentMapper
?
谢谢
MapStruct 在运行时不执行任何操作。它曾经在编译时知道类型。
为了解决这个问题,您将不得不帮助它:
例如
@Mapper
public abstract class MotherboardComponentMapper {
public abstract MotherboardComponentDO map(MotherboardComponent component);
public ComponentDO map(Component component) {
if (component instanceof MotherboardComponent) {
return map((MotherboardComponent) component);
}
return mapAsComponentDO(component);
}
@Named("asComponentDO")
protected abstract ComponentDO mapAsComponentDO(Component component);
}
由于我们用 @Named
标记了 mapAsComponentDO
MapStruct 将不会处理它是从 Component
映射到 ComponentDO
的可能方法,它将使用 map(Component)
方法。
在 MapStruct 问题跟踪器中存在支持此类 down cast mapping 的未决问题。