False '参数“account”的类型没有名为“contact.holders.emails”的属性。' MapStruct 的 @Mapping 出现错误

问题描述 投票:0回答:1

在我们的项目中,我们有多个模块,其中 OpenAPI 规范是生成类的来源,代表各种版本的域模型。现在,使用 MapStruct(版本 1.6.2),我正在创建映射器,用于在属于不同模块的相同域类之间进行转换。

这是我的映射器类:

@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface AccountMapper {

  @Mapping(source = "account", target = "depositAccount")
  com.model5.AccountWithDetailsOneOf map(com.model6.DepositAccount account);
}

代码编译会产生此警告

java: Unmapped target property: "email". Mapping from Collection element "AccountHolder account.contact.holders" to "AccountHolder depositAccount.contact.holders".

问题是,在版本 6(这是我的源代码)中,罪魁祸首字段称为

emails
,而在版本 5(这是目标)中,相应字段的名称是
email

为了解决这个问题,我将

map()
方法修改为:

@Mapping(source = "account", target = "depositAccount")
@Mapping(source = "account.contact.holders.emails", target = "depositAccount.contact.holders.email")
com.model5.AccountWithDetailsOneOf map(com.model6.DepositAccount account);

重新编译失败后

java: The type of parameter "account" has no property named "contact.holders.emails".

但是该属性确实存在,唯一的问题是它是超类的成员(见下面的屏幕截图)。我怀疑这在某种程度上破坏了映射,但我不清楚原因,因为所有必需的 getter 和 setter 都是用 Lombok 生成的,并通过整个引用链出现在目标类中。

这是 MapStruct 强加的错误/限制还是我做错了什么?

enter image description here

java lombok mapstruct
1个回答
0
投票

您需要添加另一个映射

@Mapping(source = "emails", target = "email")
X mapYtoX(Y y);

哪里

  • X
    depositAccount.contact.holders
  • 的类型
  • Y
    account.contact.holders
  • 的类型
© www.soinside.com 2019 - 2024. All rights reserved.