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

如何使用推土机或ModelMapper将LocalDate映射到日期?

东门令
2023-03-14

如何正确设置推土机6.4.1或ModelMapper 2.2.0的映射,以成功映射java。时间LocalDate字段到java。util。日期字段,反之亦然?

考虑以下类别:

public class Foo {
    private LocalDate signatureDate;
    // getters and setters
}

public class Bar {
    private Date signatureDate;
    // getters and setters
}

然后调用映射器。map(fooInstance,Bar.class) 无效。

我尝试过创建和注册自定义转换器。使用Dozer,我创建了扩展DozerConverter的类LocalDateToDateConverter

mapper = DozerBeanMapperBuilder
        .create()
        .withCustomConverter(new LocalDateToDateConverter())
        .build();

但是com.github.推土机绘图机。果心转换器。在转换类时,使用DateConverter。

另外值得注意的是,我希望为所有可能需要这种类型转换的类提供一个通用解决方案,这样我就不必为每个类制作转换器。


共有1个答案

黄君博
2023-03-14

使用模型映射器,您可以为条形图和Foo类配置日期和本地日期之间的转换器。

转换器:

private static final Converter<Date, LocalDate> DATE_TO_LOCAL_DATE_CONVERTER = mappingContext -> {
    Date source = mappingContext.getSource();
    return source.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
};

private static final Converter<LocalDate, Date> LOCAL_DATE_TO_DATE_CONVERTER = mappingContext -> {
    LocalDate source = mappingContext.getSource();
    return Date.from(source.atStartOfDay(ZoneId.systemDefault()).toInstant());
};

映射器配置:

ModelMapper mapper = new ModelMapper();

TypeMap<Bar, Foo> barToFooMapping = mapper.createTypeMap(Bar.class, Foo.class);
barToFooMapping.addMappings(mapping -> mapping.using(DATE_TO_LOCAL_DATE_CONVERTER).map(Bar::getSignatureDate, Foo::setSignatureDate));
TypeMap<Foo, Bar> fooToBarMapping = mapper.createTypeMap(Foo.class, Bar.class);
fooToBarMapping.addMappings(mapping -> mapping.using(LOCAL_DATE_TO_DATE_CONVERTER).map(Foo::getSignatureDate, Bar::setSignatureDate));

在将日期转换为本地日期和将本地日期转换为日期时,请注意时区。

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

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

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

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

  • 我想让推土机地图成为我的职业: 到生成的,如下所示: . 也就是说,我正在尝试将嵌套类的字段映射到平面键目标。我使用的是JavaAPI的Dozer,而不是xml。我无法找到适当的构建器配置来管理它。基本代码类似于:

  • 问题内容: 我想将a存储在列中并保持不变。这两个和是“本地”类型的定义。因此, 时区 的概念不应以任何方式干涉。 下面的代码是一个最小示例,该示例在内存数据库中创建带有列的表。Maven工件必须在类路径中。 首先,定义方法和: 请注意,该方法使用单引号引起来的值,因此Java™没有机会创建时区歧义。现在,一次调用几次,每次使用不同的时区设置: 然后打印以下内容: 假设数据库表未更改,如何编写该方法