gpt4 book ai didi

java - 使用 MapStruct 进行嵌套映射

转载 作者:行者123 更新时间:2023-11-30 06:13:44 25 4
gpt4 key购买 nike

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 类。我不知道如何向 toIdentifier 映射方法提供 CustomerProfileDO 对象,以便我可以在其中包含映射本身。我尝试遵循

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

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

toIdentifer(CustomerIdentifierDO 标识符DO)

有什么办法可以实现这一点吗?

最佳答案

目前,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());
}
}

关于java - 使用 MapStruct 进行嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49678520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com