Mapstruct: как объединить два поля в одно - PullRequest
0 голосов
/ 21 февраля 2020

Используя каркас MapStruct, как сопоставить несколько полей в одно (на основе пользовательских логик c), при этом сопоставляя другие поля один к одному?

Вот простой пример, чтобы проиллюстрировать, что я имею в виду:

public class Source {
    private String firstname;               
    private String surname;  
    // other fields eg:
    private String address; 
    private int age;
    private int favoriteNumber;
}
public class Target {
    private String fullname; // Sould be firstname + surname
    // other fields eg:
    private String address; 
    private int age;
    private int favoriteNumber;
}

Я знаю, что это возможно, используя выражения:

@Mapping(target = "fullname", expression = "java(el.getFirstname() + el.getSurname())")

Но в моем специальном использовании В этом случае, не изображенном в этом примере, мне нужно использовать некоторую внешнюю библиотеку для слияния / сопоставления двух полей, что невозможно с выражениями.

Есть ли способ добиться объединения двух полей без выражений?

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете использовать аннотацию @AfterMapping

https://mapstruct.org/documentation/stable/reference/html/#customizing -mappings-with-before-and-after

Вы хотели бы заменить свой интерфейс на абстрактный класс а затем

    @AfterMapping
    void customMapping(@MappingTarget Target target, Source source) {
        // any custom logic
    }
...