Orika:如何使用嵌套映射器进行映射 [英] Orika: How to map using a nested mapper

查看:454
本文介绍了Orika:如何使用嵌套映射器进行映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下情况:

public class A {

    private ClassInA classInA;

    public ClassInA getClassInA() {
        return classInA;
    }

    public void setClassInA(ClassInA classInA) {
        this.classInA = classInA;
    }

}

public class B {

    private ClassInB classInB;

    public ClassInB getClassInB() {
        return classInB;
    }

    public void setClassInB(ClassInB classInB) {
        this.classInB = classInB;
    }

}

public class ClassInA {

    private String myString;

    public String getMyString() {
        return myString;
    }

    public void setMyString(String myString) {
        this.myString = myString;
    }

}

public class ClassInB {

    private String myString;

    public String getMyString() {
        return myString;
    }

    public void setMyString(String myString) {
        this.myString = myString;
    }

}

现在,我想使用orika将A映射到B.我需要一个转换器来做到这一点.喜欢:

Now I want to map A to B using orika. I need a converter to do so. Like:

public class MyMapper {

    @Override
    protected void configure(MapperFactory factory) {
        ConverterFactory converterFactory = factory.getConverterFactory();
        converterFactory.registerConverter(new MyConverter());

        factory.classMap(A.class, B.class) //
                .field("classInA", "classInB") //
                .register();
    }
}

public class MyConverter extends CustomConverter<ClassInA, ClassInB> {

    @Override
    public ClassInB convert(ClassInA source, Type<? extends ClassInB> destinationType) {
        ClassInB classInB = new ClassInB();
        classInB.setMyString(source.getMyString());
        return classInB;
    }

}

尽管从ClassInAClassInB的映射器会更好.喜欢:

Although a mapper for ClassInA to ClassInB would be better. Like:

public class MyMapper extends ConfigurableMapper {

    @Override
    protected void configure(MapperFactory factory) {
        factory.classMap(ClassInA.class, ClassInB.class) //
                .byDefault
                .register();
    }
}

可悲的是,我不知道如何在MyMapper中注册映射器.没有像converterFactory.registerMapper(new MyMapper());这样的东西.我唯一可以做到的方法是通过

Sadly I have no clue how to register the mapper in MyMapper. There is nothing like converterFactory.registerMapper(new MyMapper());. The only way I could do this is via

.customize(
    return new CustomMapper<LoanContractRequestValue, LoanContrReqERPCrteReqLoanContr>() {
        @Override
        public void mapAtoB(A source, B destination, MappingContext context) {
            destination.setMyString(source.getMyString());
        }
    };
)

但这真的是要走的路吗?

But is this really the way to go for?

推荐答案

您可以在同一个mapperFactory中注册多个classMap,Orika会根据类/类型知道要使用哪个.

You can register multiple classMaps in the same mapperFactory, Orika will know which one to use based on the class/type.

public class MyMapper extends ConfigurableMapper {
    @Override
    protected void configure(MapperFactory factory) {
        factory.classMap(A.class, B.class)
                .field("classInA", "classInB")
                .register();

        factory.classMap(ClassInA.class, ClassInB.class)
                .byDefault
                .register();
    }
}

这篇关于Orika:如何使用嵌套映射器进行映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆