当前位置: 首页 > 知识库问答 >
问题:

推土机映射JodaTime属性未按预期工作

淳于乐池
2023-03-14

我正在使用Dozer在Document类和DocumentManagementBean类之间进行映射,这都是我自己制作的。两者都有一个Joda DateTime类型的属性,即getter和setter,名为dateAdded。

当文档对象d的属性dateAdded=x时,调用映射器。map(d,DocumentManagementBean.class)所有字段都会正确地自动映射(因为我完全控制代码库,所以我可以不用dozer配置,只依赖匹配的属性名称),除了dateAdded字段,其中新的DocumentManagementBean以其dateAdded属性中的当前日期时间结束,而不是d对象中的x。

我在等Dozer打电话

<代码>dmb。setDateAdded(d.getDateAdded())

只需将dateAdded的值从源代码带到目标代码,但它似乎是在为dmb对象创建新的DateTime,然后就不用管它了。

有人能帮我解释一下吗?

共有3个答案

夏意蕴
2023-03-14

在xml文件中设置“按引用复制”全局属性

    <copy-by-references>
        <copy-by-reference>
            org.joda.time.LocalDate
        </copy-by-reference>
        <copy-by-reference>
            org.joda.time.LocalDateTime
        </copy-by-reference>
    </copy-by-references>
禹昊穹
2023-03-14

您可能不再需要它了,但Dozer提供了通过引用复制对象的机会,至少使用最新版本(现在,这个版本是5.4.0)。通过引用复制是您正在寻找的。

<field copy-by-reference="true">
  <a>copyByReference</a>
  <b>copyByReferencePrime</b>
</field>

文档:http://dozer.sourceforge.net/documentation/copybyreference.html

孙夕
2023-03-14

基本的问题是,Dozer通过new DateTime()创建了一个新的DateTime空实例,这就是如何以当前日期/时间而不是原始日期/时间结束的。可能有多种解决方案,我通常使用customconverter,全局定义:

    <converter type="de.kba.resper.customconverter.DateTimeCustomConverter">
        <class-a>org.joda.time.DateTime</class-a>
        <class-b>org.joda.time.DateTime</class-b>
    </converter>

public class DateTimeCustomConverter extends DozerConverter<DateTime, DateTime> {

    public DateTimeCustomConverter() {
        super(DateTime.class, DateTime.class);
    }

    @Override
    public DateTime convertTo(final DateTime source, final DateTime destination) {

        if (source == null) {
            return null;
        }

        return new DateTime(source);
    }

    @Override
    public DateTime convertFrom(final DateTime source, final DateTime destination) {

        if (source == null) {
            return null;
        }

        return new DateTime(source);
        }

}

不过,这可能有些过头了:)

 类似资料:
  • 我试图使用Dozer映射UUID字段,遇到了Dozer github上提到的一个问题: https://github.com/DozerMapper/dozer/issues/83 问题是-显然,Dozer依赖于UUID中不存在的默认无参数构造函数。因此,该链接显示了如何告知推土机执行参考复制。然而,使用该提示并没有帮助,我仍然会遇到以下异常: org.dozer.java.lang.java.u

  • 所以,我有一个问题,这里的人可能会帮助我与推土机。 背景:我设置了Dozer来将我的持久性实体映射到它们的DTO类。这很简单,我只是创建一个实体类的精确副本作为POJO,并允许dozer通配符查看字段的名称是否与源字段匹配。我正在使用自定义映射器处理Hibernate延迟加载问题,就像这里所做的那样。我告诉Dozer如何通过一个类来映射每个类,该类扫描实体中名为@EntityMap(DTOxxx.

  • 我在Spring启动时使用推土机映射器。如果我将数据从实体映射到EntityDTO,那么dozer maper的工作就是将数据从实体类复制到EntityDTO,对于原语也是如此。但是假设我有这样一门课 和名称为EntityDTO的DTO 那么它不会将数据从entityChild映射到EntityChildTos,有人能帮我解决这个问题吗?

  • 我是使用dozer的新手。我需要将集合映射到一个类,该类是集合中源类的属性。我有如下类技术 我想映射到 哪里 我的推土机绘图将是什么样子?

  • 问题内容: 我有两个使用的示例。首先是对回调函数的引用。第二个有一个箭头函数声明为该值。 第一个按预期工作。但是,第二个在连续渲染中记录a 。 这是什么原因呢? 开始在输入框中输入内容 示例1(工作正常) 示例2(这不起作用) 问题答案: 关于React的Github问题已经对此进行了简要讨论。我会尽力解释这一点,但是很难用语言表达。 由于在第二个示例中您没有调用“智能”组件方法,因此每次重新渲染

  • 在Dozer的帮助下,我想将映射到DTO类 但是这两种设置