推土机UUID映射

时间:2013-12-05 18:15:46

标签: java uuid dozer

我正在尝试使用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>

关于我可能做错的任何想法?谢谢!

1 个答案:

答案 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;
    }
}