Jor*_*nez 3 java date spring-boot mapstruct localdatetime
我正在尝试使用具有 Date (java.util.Date) 字段的 Mapstruct 的映射器将对象转换为具有 LocalDateTime 字段的对象。问题在于它映射的时间错误,因为在具有 LocalDateTime 字段的对象中它总是显示少 2 小时。
@Mapping(source = "createdDate", target = "createdLocalDateTime")
ObjectA toEntity(ObjectB);
Run Code Online (Sandbox Code Playgroud)
我认为问题在于自动实现:
if ( createdDate!= null ) {
objectA.createdLocalDateTime( LocalDateTime.ofInstant( createdDate.toInstant(), ZoneId.of( "UTC" ) ) );
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?谢谢!
mapstruct issues tracker 上已经有关于此问题的对话。他们在那里谈论损失一天,但原因和解决方案是相似的:
您可以执行且非常简单的解决方案是为您提供自己的 Date 到 LocalDate 之间的映射方式。
例如
public class DateUtils {
public static LocalDate toLocalDate(Date date) {
return date == null ? null : date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}
}
Run Code Online (Sandbox Code Playgroud)
并确保 DateUtils 是 Mapper#uses 的一部分。这样,MapStruct 将使用您的自定义函数在 Date 和 LocalDate 之间进行映射。