Mapstruct从子映射器继承并提取

问题描述

我有一个审核对象来记录createdupdatedcreator的三个属性,如下所示:

public class Audit {
    private OffsetDateTime created;
    private OffsetDateTime updated;
    private String creator;
}

每个POJO都具有审核属性

public class A {
    private Audit audit;
}
public class B {
    private Audit audit;
}
public class C {
    private Audit audit;
}

...等

现在,我想问一下如何创建一个可重用的模型和映射器,以将createdupdatedcreator提取到父层(可能是继承的或某些注释),如下所示:

// Before mapping
A {
    ...,audit: {
        created: ...,updated: ...,creator: ...
    }
}
// I wanna to mapping like these
A {
    ...
    created: ...,creator: ...
}
B {
    ...
    created: ...,creator: ...
}
C {
    ...
    created: ...,creator: ...
}

还是我必须为这些类的所有映射器使用@Mapping(source = audit.created,target = created)批注?

解决方法

我不确定我是否正确理解您。但是,MapStruct 1.4.0.Beta3定义了鸭子类型。您可以将自己的注释作为@Mapping(source = audit.created,target = created)的简写,请参见documentation

在1.3.x中,您需要为目标/源定义通用的基本类型,并且可以从基本映射方法继承映射。检出documentation