【问题标题】:Mapping DTO using Mapstruct使用 Mapstruct 映射 DTO
【发布时间】:2019-09-27 14:37:58
【问题描述】:

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

所以,如果我的来源属性有 hotmail.com,我的目标属性应该收到“个人”,如果我的来源有 facebook.com,我的目标应该收到“公司”。

我试图使用表达式,但无法绕过它。 我该怎么做?

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

【问题讨论】:

  • 您可以发布您的 Dto 结构吗?您的 Dto 中应该有两个文件,例如 emaillink ?你有吗?
  • 我确实有这两个字段。我的要求是,如果源字段中包含值 A,我不将 A 存储在目标中,我应该存储 Z。A 存储为 -> Z B 存储为 -> Y

标签: java spring mapstruct


【解决方案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";
        }
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 2023-03-23
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2018-09-14
      相关资源
      最近更新 更多