0

使用 MapStruct,我们想使用 ReportingPolicy.ERROR,并且有如下代码:

@Mapping(source = "nestedSource.doublyNestedSourceField", target = "nestedTarget.doublyNestedTargetField")
Target mapSourceToTarget(Source source);

其中nestedSource 与nestedTarget 的类型不同,并且两个doublyNested*Field 类型都是String。

没有为 NestedSource -> NestedTarget 声明映射器。上面映射中声明的 String 属性是这些类型中的唯一属性。

以上导致未映射的源错误:

Unmapped source property: "doublyNestedSourceField".

这似乎或多或少是合理的,因为我们没有为 NestedSource -> NestedTarget 声明映射器。

但是,问题是:如果我们将未映射源的 ReportingPolicy 更改为警告/忽略,MapStruct 会计算出如何在映射器实现中正确映射 doublyNestedSourceField,即使它声称不存在源映射。只是想知道这里发生了什么,以及我是否遗漏了什么。

----深入杂草一点(在 MapStruct 代码本身中)----

我可能做错了什么,但我确实注意到在 BeanMethodMapping.java MapStruct 尝试从 unprocessedSourceProperties 中删除“nestedSource.doubleNestedSourceField”,即使相应属性的键只是 unprocessedSourceProperties 中的“nestedSource”。因此,“nestedSource”保留为未处理的源属性并引发错误。

4

0 回答 0