【问题标题】:Nested Mapping using MapStruct使用 MapStruct 的嵌套映射
【发布时间】:2018-09-15 15:21:00
【问题描述】:
class Identifier {
    private long id;
    private String type;
    private List<Status> statuses;
}     

class Customer {
    private Identifier identifier;
}

class CustomerProfile {
    private Customer customer;
}

class CustomerIdentifierDO {
    private long id;
}

class CustomeDO {
    private CustomerIdentiferDO custID;

}

class CustomerProfileDO {
    private String category;
    private List<Status> custStatuses;
    private CustomeDO customer;
}

@Mapper
public interface CustomerProfileMapper {
    CustomerProfile toCustomerProfile(CustomerProfileDO profileDO) ;  
    Customer   toCustomer(CustomerDO customerDO);
    Identifier toIdentifier(CustomerIdentifierDO identifierDO);

}

在此之前一切正常。现在我想将CustomerProfileDO 类的custStatusescategory 映射到statusestype 类的Identifier。我不知道如何将CustomerProfileDO 对象提供给toIdentifier 映射方法,以便我可以在其中包含映射本身。我试过了

@Mappings({
     @Mapping(target = "customer.identifier.type", source = "category")
})
CustomerProfile   toCustomerProfile(CustomerProfileDO profileDO) ; 

但是这个嵌套映射覆盖了下面方法的所有映射配置。那不应该发生。

toIdentifer(CustomerIdentifierDO identifierDO)

有什么方法可以实现吗?

【问题讨论】:

    标签: java mapstruct object-object-mapping


    【解决方案1】:

    目前 MapStruct 可以将源参数传递给单个方法。为了实现您正在寻找的东西(不使用嵌套目标类型,您需要使用 @AfterMapping 之类的东西。它可能看起来像:

    @Mapper
    public interface CustomerProfileMapper {
        CustomerProfile toCustomerProfile(CustomerProfileDO profileDO) ;  
        Customer   toCustomer(CustomerDO customerDO);
        Identifier toIdentifier(CustomerIdentifierDO identifierDO);
    
        @AfterMapping
        default void afterMapping(@MappingTarget CustomerProfile profile, CustomerProfieDO profileDO) {
            Identifier identifier = profile.getCustomer().getIdentifier();
            identifier.setStatus(profileDO.setStatus());
            identifier.setType(profileDO.setCategory());
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多