【问题标题】:Dozer UUID mapping推土机 UUID 映射
【发布时间】:2013-12-05 18:15:46
【问题描述】:

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

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

【问题讨论】:

  • 不能用String来存储UUID吗?为什么生成正确的值后还需要 UUID 类?
  • 这不是重点;让我们假设需要使用 UUID(在我的情况下,有,并且没有很好的解决方法)。

标签: java uuid dozer


【解决方案1】:

您正在使用映射器从一个 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;
    }
}

【讨论】:

  • 有趣!是的,我尝试了一个“更简单”的测试,但没有意识到这不是推土机的工作方式(我第一次使用它)。谢谢,我将尝试进行适当的测试,其中 UUID 将是映射类的属性。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多