gpt4 book ai didi

java - 如何使用 Dozer 或 ModelMapper 将 LocalDate 映射到 Date?

转载 作者:行者123 更新时间:2023-11-30 06:00:14 28 4
gpt4 key购买 nike

如何正确设置 Dozer 6.4.1 或 ModelMapper 2.2.0 的映射以成功映射 java.time.LocalDate字段至 java.util.Date场,反之亦然?

考虑这些类:

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

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

然后调用mapper.map(fooInstance, Bar.class);行不通。

我尝试过创建和注册自定义转换器。使用 Dozer,我创建了类 LocalDateToDateConverter延伸DozerConverter<LocalDate, Date>并实现了正确的转换。然后像这样注册:

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

但是com.github.dozermapper.core.converters.DateConverter在转换类时使用它。

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

最佳答案

使用模型映射器,您可以配置 converters对于 BarFoo 类,在 DateLocalDate 之间。

转换器:

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));

Date转换为LocalDate以及将LocalDate转换为Date时,请注意时区。

关于java - 如何使用 Dozer 或 ModelMapper 将 LocalDate 映射到 Date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387605/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com