У меня есть этот Mapper, и я хочу преобразовать Entity в DTO. Моя сущность содержит переменную createdDate, которая является Instant, а мой DTO содержит commentedDate, которая является отметкой времени.
Я не знаю, как можно автоматически конвертировать Instant в Timestamp с помощью MapStruct.
public interface BlogMapper {
@Mappings({
@Mapping(target = "userId", source = "user.id"),
@Mapping(target = "commentedDate", source = "createdDate")
})
BlogDto entityToDto(final Comment entity);
}
Спасибо за вашу помощь :)




Этот вопрос действительно похож на Mapstruct LocalDateTime для 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(s) будут сопоставлены с Timestamp. Вы также можете извлечь этот метод в статический класс утилиты, а затем использовать его через Mapper#uses
проверьте эту ссылку: stackoverflow.com/questions/47901178/…