Mapstruct LocalDateTime to Instant

时间:2017-12-20 07:52:43

标签: java-time mapstruct datetime-conversion localdate java.time.instant

我是Mapstruct的新手。我有一个模型对象,其中包含LocalDateTime类型字段。 DTO包含Instant类型字段。我想将LocalDateTime类型字段映射到Instant类型字段。我有 TimeZone 传入请求的实例。

像这样手动设置字段;

set( LocalDateTime.ofInstant(x.getStartDate(), timeZone.toZoneId()) )

如何使用Mapstruct映射这些字段?

1 个答案:

答案 0 :(得分:5)

您有2个选项可以实现您的目标。

第一个选项:

使用1.2.0.Final中的新@Context注释作为timeZone属性,并定义自己的方法来执行映射。类似的东西:

public interface MyMapper {

    @Mapping(target = "start", source = "startDate")
    Target map(Source source, @Context TimeZone timeZone);

    default LocalDateTime fromInstant(Instant instant, @Context TimeZone timeZone) {
        return instant == null ? null : LocalDateTime.ofInstant(instant, timeZone.toZoneId());
    }
}

然后,MapStruct将使用提供的方法在InstantLocalDateTime之间执行映射。

第二个选项:

public interface MyMapper {

    @Mapping(target = "start", expression = "java(LocalDateTime.ofInstant(source.getStartDate(), timezone.toZoneId()))")
    Target map(Source source, TimeZone timeZone);
}

我个人的选择是使用第一个