【问题标题】:How to map object properties in an Orika custom mapper?如何在 Orika 自定义映射器中映射对象属性?
【发布时间】:2016-01-16 14:19:47
【问题描述】:

我试图在Orika documentation 中找到这个问题的答案,但没有成功。

我有以下课程:

public class A {
    private String partNumber1;
    private String partNumber2;
    ...
}

public class B {
    private Integer shelfNumber;
    private A a;
    ...
}

public class BDTO {
    private Integer selfNumber;
    private ADTO someA;
    ...
}

public class ADTO {
    private String partNumber;
    ...
}

.. 和以下 CustomMapper 将 B 的对象映射到对象 BDO

@Component
public class BMapper extends CustomMapper<B, BDTO> {
    @Override
    public void mapAtoB(B b, BDTO bdto, MappingContext context) {
        super.mapAtoB(b, bdto, context);
        //??? what to do here ???  
    }
}

@Component
public class AMapper extends CustomMapper<A, ADTO> {
    @Override
    public void mapAtoB(A a, ADTO adto, MappingContext context) {
        super.mapAtoB(a, adto, context);
        adto.setPartNumber(a.getPartNumber1() + a.getPartNumber2());
    }
}

在我的客户端代码中:

B b = new B(5, new A("100392", "100342"));
BDTO bdto = mapper.map(b, BDTO.class);

我的问题是,在 BMapper 中,让 AMapper 将“a”映射到“someA”的正确方法是什么?换句话说,在 BMapper 中将 a 映射到 someA 的正确方法是什么?我怀疑它可以通过 MappingContext 对象中的某个接口来完成。

【问题讨论】:

    标签: orika


    【解决方案1】:

    经过一些实验,我找到了答案。要在主对象映射器中映射属性对象,即上述场景,可以使用 CustomMapper 的受保护“mapperFacade”成员。

    所以你可以这样做:

    bdto.setSomeA(super.mapperFacade.map(b.getA(), ADTO.class));
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2017-03-22
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多