Сопоставление DTO с использованием Mapstruct - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в Mapstruct и у меня есть проблемы в конкретном сценарии использования

, поэтому, если у моего атрибута источника есть hotmail.com, мой целевой атрибут должен получить "personal", а если у моего источника есть facebook.comМоя цель должна получить "корпоративный".

Я пытался использовать выражение, но не мог обойти это.как мне это сделать?

@Mapping(source = "user.email", target = "emailType")
 NewDTO myMapperMethod(MyRequest req);

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Вы можете использовать qualifiedByName и default интерфейсный метод для определения и определения подходящего метода отображения для данного свойства:

@Mapper(componentModel = "spring")
public interface RequestMapper {

    @Mapping(source = "user.email", target = "emailType", qualifiedByName = "EmailToType")
    NewDTO myMapperMethod(MyRequest req);

    @Named("EmailToType")
    default String emailTypeResolver(String email) {
        if ("hotmail.com".equals(email)) {
            return "personal";
        } else if ("facebook.com".equals(email)) {
            return "corporate";
        } else {
            return "unknown";
        }
    }
}
0 голосов
/ 28 сентября 2019

Это не то, что MapStruct должен решить для вас.Он принимает решение во время выполнения, основываясь на контенте.Обычно это бизнес-проблема, а не картографическая проблема

...