我试图使用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>对我可能做错了什么有什么想法吗?谢谢!
发布于 2013-12-05 18:31:20
您使用映射器将UUID映射到另一个UUID?你不应该测试一下你可以把UUID从A类映射到B类吗?当您直接映射UUID时,dozer将反射地检查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;
}
}https://stackoverflow.com/questions/20407597
复制相似问题