gpt4 book ai didi

java - Orika - 没有为源定义具体的类映射

转载 作者:行者123 更新时间:2023-11-30 03:14:50 25 4
gpt4 key购买 nike

我有一个 Class1,我想将其转换为 Class2。

Class1 和 Class2 都有一个字段:AbstractClass3 some

AbstractClass3 被声明为 abstract,但它的值是 Class1&2 字段中的具体实现。

在 Class1 和 Class2 之间转换时,出现以下异常:

No concrete class mapping defined for source

我希望 Orika 在目标类 (Class2) 中使用与源类 (Class1) 相同的实现。

实现这一目标的最佳方法是什么?

最佳答案

我试图看看你的问题,但我想我可能错过了一些东西(或者我可能没有正确理解问题),因为默认情况下 Orika 似乎已经使用源的实现来创建实现目的地(如果配置了类映射),请看一下代码。

public class OrikaTest {

private MapperFacade mapper;
private MapperFactory factory;

@Before
public void setUp() {
factory = new DefaultMapperFactory.Builder().mapNulls(false).build();
factory.registerClassMap(factory.classMap(One.class, Two.class)
.byDefault()
.toClassMap());
factory.registerClassMap(factory.classMap(Class3Impl1.class, Class3Impl1.class)
.byDefault()
.toClassMap());
factory.registerClassMap(factory.classMap(Class3Impl2.class, Class3Impl2.class)
.byDefault()
.toClassMap());
mapper = factory.getMapperFacade();
}

public static class One {
public Class3 class3;
}

public static class Two {
public Class3 class3;
}

public static abstract class Class3 {
public String x = "x";
}

public static class Class3Impl1 extends Class3 {
public String y = "y";
}

public static class Class3Impl2 extends Class3 {
public String y = "y";
}

@Test
public void mapping1Test() {
One one = new One();
one.class3 = new Class3Impl1();

Two two = mapper.map(one, Two.class);

assertEquals(one.class3.x, two.class3.x);
assertTrue(Class3Impl1.class.isInstance(two.class3));
assertEquals(((Class3Impl1) one.class3).y, ((Class3Impl1) two.class3).y);
}

@Test
public void mapping2Test() {
One one = new One();
one.class3 = new Class3Impl2();

Two two = mapper.map(one, Two.class);

assertEquals(one.class3.x, two.class3.x);
assertTrue(Class3Impl2.class.isInstance(two.class3));
assertEquals(((Class3Impl2) one.class3).y, ((Class3Impl2) two.class3).y);
}

关于java - Orika - 没有为源定义具体的类映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com