我尝试使用带有Mapstruct的Map器将一个对象转换为带有LocalDateTime字段的对象,该Map器带有Date(java.util.Date)字段。问题是它Map的时间是错误的,因为在带有LocalDateTime字段的对象中,它总是显示少2小时。
@Mapping(source = "createdDate", target = "createdLocalDateTime")
ObjectA toEntity(ObjectB);
我认为问题在于自动实现:
if ( createdDate!= null ) {
objectA.createdLocalDateTime( LocalDateTime.ofInstant( createdDate.toInstant(), ZoneId.of( "UTC" ) ) );
}
我该怎么解决这个问题?谢谢!
3条答案
按热度按时间xfb7svmp1#
在mapstruct issues tracker上已经有关于此的对话。在那里,他们谈论失去一天,但原因和解决方案是相似的:
您可以做的解决方案是提供自己的方式在Date到LocalDate之间进行Map。
例如
并确保DateUtils是Mapper#uses的一部分。这样,MapStruct将使用您的自定义函数在Date和LocalDate之间进行Map。
cu6pst1q2#
一个基本的转换是
因为你还没有发布你的转换代码,我们不知道你那边发生了什么。
xvw2m8pv3#
使用MapperStruct的一个接口将格式分段: