Mapstruct:将多个源对象映射到子对象

时间:2016-02-29 18:32:54

标签: java mapping mapstruct

给出一组四个对象,如:

A{String one, B b}

B{String two, String three}

C{String one, String two}

D{String three}

我希望生成如下的映射:

A cAndDToA(C c , D d);

我目前无法找到使用C和D中的数据填充A内B对象的方法。

有没有人知道这个问题的解决方案,或者有更好的方法?

1 个答案:

答案 0 :(得分:7)

您可以定义一种从BC填充D的方法:

B cAndDToB(C c, D d);

然后通过cAndDToA上的decorator手动调用此内容:

@Mapper(decoratedWith=MyMapperDecorator.class)
public interface MyMapper {
    A cAndDToA(C c, D d);
    B cAndDToB(C c, D d);
}

public abstract class MyMapperDecorator implements MyMapper {

    private final MyMapper delegate;

    public MyMapperDecorator(MyMapper delegate) {
        this.delegate = delegate;
    }

    @Override
    public A cAndDToA(C c, D d) {
        A a = delegate.cAndDToA( c, d );
        a.setB( cAndDToB( c, d );

        return a;
    }
}

我们也会在目标方面为nested mappings提供支持。但我们还没有:)