java 是否可以使用mapstruct链接Map器

bvuwiixz  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(138)

我有3门课:A、B和C
还有一些制图员A → B → C
我想创建第三个Map器(A -〉C),它使用前两个Map器。

@Mapper
public abstract class TestMapper {

    public abstract B toB(A a);
    public abstract C toC(B b);

    public abstract C toC(A a); // How to chain existing mapper methods ?
/*
    // Expected implementation
    public C toC(A a) {
        C c = toC(toB(a));
        additionalStuff(a, c);
        return c;
    }
*/

    @AfterMapping
    protected void additionalStuff(A a, @MappingTarget B b) {
        // some mapping logic
    }

    @AfterMapping
    protected void additionalStuff(A a, @MappingTarget C c) {
        // some mapping logic
    }
}

我不想重写从A到C的Map器,而希望重用现有的Map器,因为从A到B有点复杂(从A到C也是如此),但重用现有的方法将非常简单。
我可以自己编写预期的实现,但我觉得这是一个遗憾。
有什么想法吗?

qxgroojn

qxgroojn1#

我不认为有这样的功能,但你可以自己做:
BMapper:

@Mapper
public abstract class BMapper {
    
    BMapper INSTANCE = Mappers.getMapper(BMapper.class);

    public abstract B toB(A a);
        
    @AfterMapping
    protected void additionalStuff(A a, @MappingTarget B b) {
        // some additional mapping logic
    }

}

联系人:

@Mapper
public abstract class CMapper {
    
    CMapper INSTANCE = Mappers.getMapper(CMapper.class);

    public abstract C toC(B b);

    public C toC(A a) {
        C c = toC(BMapper.INSTANCE.toB(a));
        additionalStuff(a, c);
        return c;
    }

    private void additionalStuff(A a, C c) {
        // some additional mapping logic
    }

}

文件:
向Map器添加定制方法
个人观点:
这可能会有点混乱,所以在a和c之间有一个直接的Map会更好。

相关问题