我正在尝试使用Dozer映射UUID字段,并遇到dozer github上提到的问题:
https://github.com/DozerMapper/dozer/issues/83
问题是 - 显然,Dozer依赖于默认的无参数构造函数,这在UUID中不存在。因此,该链接显示了如何告诉Dozer执行引用复制。但是,使用该提示没有帮助,我仍然得到这个例外:
org.dozer.MappingException:java.lang.NoSuchMethodException: java.util.UUID中。()
测试失败了:
@Test
public void testUUIDMapping() {
UUID source = fakeUUID1;
UUID result = mapper.map(source, UUID.class);
Assert.assertEquals(result, source);
}
最后,根据问题中的提示,映射是这样的:
<configuration>
<copy-by-references>
<copy-by-reference>java.util.UUID</copy-by-reference>
</copy-by-references>
</configuration>
关于我可能做错的任何想法?谢谢!
答案 0 :(得分:0)
您是否正在使用映射器从UUID映射到另一个UUID?您是否应该测试是否可以将UUID从A类映射到B类?当您直接映射UUID 时,推土机将反射性地检查UUID内的字段并尝试将它们从一个复制到另一个。
换句话说,我不认为这个测试是有效的。这个测试通过了我(它需要你添加的配置):
@Test
public void whenMappingAUuidThenItGetsCopiedByReference() {
ClassWithUuid a = new ClassWithUuid();
UUID uuid = UUID.randomUUID();
a.setUuid(uuid);
Mapper mapper = new Mapper();
ClassWithUuid b = //map to b
assertEquals(uuid, b.getUuid());
}
public static class ClassWithUuid {
private UUID uuid;
public UUID getUuid() {
return uuid;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
}