7

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

像这样手动设置字段;

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

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

4

1 回答 1

11

您有 2 个选项来实现您正在寻找的东西。

第一个选项:

@Context使用1.2.0.Final 中的新注释作为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 将使用提供的方法来执行 和 之间的Instant映射LocalDateTime

第二个选项:

public interface MyMapper {

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

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

于 2017-12-22T22:43:00.693 回答