Spring Mapping с использованием пользовательского метода mapper - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть два объекта со всеми одинаковыми членами, за исключением элемента date.В Obj1.date - это java.sql.Date, а Obj2.date - это длинная (эпоха).

Мне нужно написать картограф для сопоставления obj1 и obj2.Вот что я пытался сделать:

@Named("sqlDateToEpoch")
default long sqlDateToEpoch(Date timestamp) throws ParseException {
    return myUtils.sqlDateToEpoch(timestamp);
}

@Mapping(source = "date", target = "date", qualifiedByName = "sqlDateToEpoch")
Obj2 toObj2(Obj1 source);

List<Obj2> toRecordList(List<Obj1> source);

Но mapperImpl просто имеет собственную реализацию для преобразования даты:

if (source.getDate() != null) {
    Obj2.setDate(Long.parseLong(source.getDate()));
}

Я получаю:

java.lang.NumberFormatException: For input string: "2019-04-02 00:00:00.0"

Каков правильный путь для такого обращения?

1 Ответ

0 голосов
/ 03 апреля 2019

Я думаю, что причина, по которой это не работает, в том, что ваш source.getDate() возвращает String, а не java.sql.Date. Это приводит к тому, что MapStruct использует неявное преобразование String в long.

Чтобы исправить это, вам нужно либо убедиться, что source.getDate() возвращает java.sql.Date, либо добавить метод, который бы получил String и вернул Long.

...