2
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);

}

在此之前一切正常。现在我想将custStatuses, categoryof CustomerProfileDOclass 映射到statusesand typeof Identifierclass 。我不知道如何为映射方法提供CustomerProfileDO对象toIdentifier,以便我可以在其中包含映射本身。我试过以下

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

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

toIdentifer(CustomerIdentifierDO identifierDO)

有什么办法可以做到这一点?

4

1 回答 1

2

目前 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());
    }    
}
于 2018-04-05T19:52:22.143 回答