将 LocalDateTime 映射到 Instant
Mapstruct LocalDateTime to Instant
我是 Mapstruct 的新手。我有一个模型对象,其中包含 LocalDateTime
类型字段。 DTO 包括 Instant
类型字段。我想将 LocalDateTime
类型字段映射到 Instant
类型字段。我有 TimeZone 个传入请求实例。
像这样手动设置字段;
set( LocalDateTime.ofInstant(x.getStartDate(), timeZone.toZoneId()) )
如何使用 Mapstruct 映射这些字段?
您有 2 个选项可以实现您的目标。
第一个选项:
为 timeZone
属性 使用 1.2.0.Final 中的新 @Context
注释,并定义您自己的执行映射的方法。类似于:
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);
}
我个人的选择是使用第一个
我是 Mapstruct 的新手。我有一个模型对象,其中包含 LocalDateTime
类型字段。 DTO 包括 Instant
类型字段。我想将 LocalDateTime
类型字段映射到 Instant
类型字段。我有 TimeZone 个传入请求实例。
像这样手动设置字段;
set( LocalDateTime.ofInstant(x.getStartDate(), timeZone.toZoneId()) )
如何使用 Mapstruct 映射这些字段?
您有 2 个选项可以实现您的目标。
第一个选项:
为 timeZone
属性 使用 1.2.0.Final 中的新 @Context
注释,并定义您自己的执行映射的方法。类似于:
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);
}
我个人的选择是使用第一个