使用Mapstruct映射DTO

时间:2019-09-27 14:37:58

标签: java spring mapstruct

我是Mapstruct的新手,在特定用例中遇到了问题

因此,如果我的来源属性具有hotmail.com,则我的目标属性应收到“个人”,如果我的来源属性具有facebook.com,则我的目标应获得“公司”。

我试图使用表达式,但无法解决。 我该怎么办?

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

2 个答案:

答案 0 :(得分:1)

您可以使用qualifiedByNamedefault接口方法来限定和定义给定属性的适当映射方法:

@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";
        }
    }
}

答案 1 :(得分:0)

MapStruct不能为您解决。它正在根据内容做出运行时决策。通常是业务问题,而不是映射问题