gpt4 book ai didi

java - Orika 列表为空

转载 作者:行者123 更新时间:2023-12-01 09:52:18 26 4
gpt4 key购买 nike

考虑 2 个对象:

public class ClassA {

private List<Animal> animals;

public List<Animal> getAnimals() {
return animals;
}

public void setAnimals(List<Animal> animals) {
this.animals = animals;
}

}

public class ClassB {

private List<OtherAnimals> animals;

public List<OtherAnimals> getAnimals() {
return animals;
}

public void setAnimals(List<OtherAnimals> animals) {
this.animals = animals;
}

}

使用 orika 映射器:

public class AnimalMapper extends ConfigurableMapper {

@Override
protected void configure(MapperFactory factory) {
factory.classMap(ClassA.class, ClassB.class) //
.mapNulls(true) //
.byDefault() //
.register();
}

}

然后以下测试失败:

@Test
public void testMap() throws Exception {
ClassA classA = new ClassA();

ClassB outcome = classUnderTest.map(classA, ClassB.class);

assertThat(outcome.getAnimal(), is(nullValue()));
}

这是因为 outcome.getAnimal() 已变成空数组列表。 为什么会发生这种情况?另一件非常值得注意的事情是:如果我用内容填充这两个列表,映射甚至会发生!虽然它们的类型不同!

那就是

@Test
public void testMap() throws Exception {
ClassA classA = new ClassA();
Animal animal = new Animal();
animal.setName("Brix");
classA.setAnimals(Arrays.asList(animal));

ClassB outcome = classUnderTest.map(classA, ClassB.class);

assertThat(outcome.getAnimal().get(0).getName(), is("Brix"));
}

public class Animal {

String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

public class OtherAnimal {

String name;
int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

成功。 可以信赖吗?这安全吗?

最佳答案

发生这种情况是因为 Orika 将使用 byDefault 设置动态创建映射器。当 Orika 找到具有相同名称和兼容类型的字段(A 的列表到 B 的集合,然后为 A 到 B 创建另一个映射器,它似乎有一个公共(public)字段名称:String)时,实际上是安全的。

如果它不符合您的口味,您可以使用以下命令禁用此“魔法”useAutoMapping( boolean useAutoMapping);

http://orika-mapper.github.io/orika-docs/mapper-factory.html

关于java - Orika 列表为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530015/

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