我有这个Mapper,我想将实体转换为DTO。 我的实体包含一个变量InstantDate,它是一个Instant,而我的DTO包含commentedDate,它是一个时间戳。
我不知道如何将MapStruct的Instant即时转换为Timestamp。
public interface BlogMapper {
@Mappings({
@Mapping(target = "userId", source = "user.id"),
@Mapping(target = "commentedDate", source = "createdDate")
})
BlogDto entityToDto(final Comment entity);
}
感谢您的帮助:)
答案 0 :(得分:1)
这个问题实际上与Mapstruct LocalDateTime to Instant类似。唯一的不同是,这要求在Timestamp
和Instant
之间进行转换。
实现此目标的最佳方法是提供自定义映射方法。例如:
@Mapper
public interface BlogMapper {
@Mapping(target = "userId", source = "user.id"),
@Mapping(target = "commentedDate", source = "createdDate")
BlogDto entityToDto(final Comment entity);
default Timestamp map(Instant instant) {
return instant == null ? null : Timestamp.from(instant);
}
}
使用所有Instant
将被映射到Timestamp
。您还可以将该方法提取到静态util类中,然后通过Mapper#uses
答案 1 :(得分:0)
您可以尝试:
@Mapping(target="commentedDate", expression = "java( java.sql.Timestamp.from(entity.getCreatedDate()) )")