MapStruct / Java-将时间戳转换为即时

时间:2019-05-31 09:26:19

标签: java spring mapstruct

我有这个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);
}

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

这个问题实际上与Mapstruct LocalDateTime to Instant类似。唯一的不同是,这要求在TimestampInstant之间进行转换。

实现此目标的最佳方法是提供自定义映射方法。例如:

@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()) )")