【问题标题】:Mapstruct mapping one target To another target - javaMapstruct 将一个目标映射到另一个目标 - java
【发布时间】:2021-11-02 17:22:28
【问题描述】:
Mapstruct version : 1.4
java - 8

我有一个需要将目标映射到目标的用例

//target
public  class Office {
    private String name;
    private String phoneNumberWithcode // some logic needs to do
    private String department;
    private String phone;
}

//my source - My Address string has phone Number
public  class Department {
    private String Address; # 
    private String empNumber;
    private String department;
}

    @Mappings({
       @Mapping(target = "phone", source = "Address", qualifierName="getPhoneFromAddress"),
    })
public abstract Office getOfficeFromDepartment(
    Department dept);

我想做什么

1.我的部门没有电话号码属性。 phone 仅作为 Address 字符串的一部分提供

2.从Address字符串获取手机

3.使用该电话属性创建属性phoneNumberWithcode

问题

我想将这个提取的phone 映射到phoneNumberWithcode

    @Mappings({
       @Mapping(target = "phone", target = "phoneWithCode", qualifierName="convertPhoneToPhoneWithCode"),
    })

public String convertPhoneToPhoneWithCode(){
//some processing
}

错误: 重复属性目标

现在 phone 和 PhoneWithCode 都只适用于目标“Office”

我如何做到这一点。甚至可以使用mapstruct。我知道它可以在 mapstruct 之外实现。尝试使用 mapstruct 看看是否可行。

谢谢

【问题讨论】:

  • 看来您也可以从 Address 中提取 phoneWithCode。

标签: java mapstruct


【解决方案1】:

这可以通过@AfterMapping 注解来实现:

@Mapping(target = "phone", source = "phone")
Office map(String phone);

@AfterMapping
default void update(@MappingTarget Office office) {
    String phone = office.getPhone();
    office.setPhoneWithCode(convertPhoneToPhoneWithCode(phone));
}

【讨论】:

    【解决方案2】:

    @Mapping 注释针对从一个源到一个目标的映射量身定制。

    既然您已经找到了从Adrressphone 的映射的方法,为什么不应用两次呢?

    例如

    
    @Mapping(target = "phone", source = "Address", qualifierName="getPhoneFromAddress")
    @Mapping(target = "phoneWithCode", source = "Address", qualifierName="getPhoneFromAddress")
    public abstract Office getOfficeFromDepartment(
        Department dept);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 2014-08-13
      • 2021-02-14
      • 2021-10-03
      • 1970-01-01
      相关资源
      最近更新 更多