MapStruct/Java — временная метка преобразования в Instant

У меня есть этот 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);
}

Спасибо за вашу помощь :)

проверьте эту ссылку: stackoverflow.com/questions/47901178/…

soorapadman 31.05.2019 11:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
5 664
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот вопрос действительно похож на 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

Другие вопросы по теме