使用基类的映射器映射子类



>我有以下类结构

class MapFromBase {
}
class MapFromChild extends MapFromBase {
}
class MapToBase {
}
class MapToChild extends MapToBase {
}
@Mapper
interface Mapper {
@Mappings(/* a lot of mappings */)
MapToBase mapBase (MapFromBase value);
MapToChild mapChild (MapFromChild value);
}

有没有办法让mapChild映射器对从基类继承的所有字段使用mapBase映射器,而无需手动复制所有映射?

MapStruct 具有继承配置的机制。在您的情况下,我会定义一个共享映射配置(带注释的@MapperConfig(来代替映射器的继承,并将此共享配置包含在您的@Mapping中。然后,@MapFromChild@MapFromBase可以使用此共享配置。这样,您就可以使用组合而不是继承。

共享配置也可以由@MapToBase@MapToChild反向继承。

如果使用 1.3Beta,则有新选项可以自动继承映射器中的所有选项(以及反向选项(

你必须链接MapFromChild和MapToChild。您可以为其使用通用标记。

class ChildType {        
}
class Child extends ChildType {
}
class SuperChild extends ChildType {
}
class OtherChild extends ChildType {
}
class MapFromBase<T extends ChildType> {
}
class MapFromChild extends MapFromBase<Child> {
}
class MapToBase<T extends ChildType> {
}
class MapToChild extends MapToBase<Child>  {
}
@Mapper
interface Mapper <X extends ChildType> {
MapToBase<X> universalMap (MapFromBase<X> value);
}

ChildType也可以是一个接口。

最新更新