I am new in Mapstruct. I have a model object which includes LocalDateTime
type field. DTO includes Instant
type field. I want to map LocalDateTime
type field to Instant
type field. I have TimeZone instance of incoming requests.
Manually field setting like that;
set( LocalDateTime.ofInstant(x.getStartDate(), timeZone.toZoneId()) )
How can I map these fields using with Mapstruct?
You have 2 options to achieve what you are looking for.
First option:
Use the new @Context
annotation from 1.2.0.Final for the timeZone
property and define your own method that would perform the mapping. Something like:
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 will then use the provided method to perform mapping between Instant
and LocalDateTime
.
The second option:
public interface MyMapper {
@Mapping(target = "start", expression = "java(LocalDateTime.ofInstant(source.getStartDate(), timezone.toZoneId()))")
Target map(Source source, TimeZone timeZone);
}
My personal option would be to use the first one