简体   繁体   中英

Orika mapper - Field subtype

I have the following concrete classes:

public class A1 {} 

public class B1 extends A1 {}

public class A2 {}

public class B2 extends A2 {}

public class B3 extends A2 {}

And I'd like to get a B2 instance when mapping MapperFacade.map(b1Instance, A2.class)

I need this because A2 has many subtypes (B2 and B3 as showed) and I need to map the appropriate one when needed

Is it possible to achieve this with Orika?

For the people that will face the same problem, I solved this creating a CustomMapper like this that verifies which is the sub-type to instantiate

mapperFactory.classMap(SOURCE.class, DEST.class)
                    .customize(new CustomMapper<SOURCE, DEST>() {
        @Override
        public void mapAtoB(SOURCE source, DEST dest, MappingContext context) {

            //verifies the type to instantiate
            private A2 a2 = isB2() ? new B2() : new B3;             
            //use the mapper for the class (will use the B2 or B3 mapper)
            mapperFacade.map(source.getA2(), a2);
            // set the field into the dest object
            dest.setB1(a2);

        }
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM