使用MapStruct,我们希望使用ReportingPolicy.ERROR,并具有如下代码:
@Mapping(source = "nestedSource.doublyNestedSourceField", target = "nestedTarget.doublyNestedTargetField")
Target mapSourceToTarget(Source source);
其中nestedSource与nestedTarget的类型不同,而doublelyNested * Field类型都是String。
没有为NestedSource声明映射器 - > NestedTarget。上面映射中声明的String属性是这些类型中唯一的属性。
以上原因导致未映射的源错误:
Unmapped source property: "doublyNestedSourceField".
这似乎或多或少是合理的,因为我们没有声明NestedSource的映射器 - > NestedTarget。
但是,问题在于:如果我们将未映射源的ReportingPolicy更改为warn / ignore,MapStruct会计算出如何在mapper实现中正确映射doublyNestedSourceField,即使它声称没有源映射存在。只是想知道这里发生了什么,以及我是否遗漏了什么。
----进入杂草多一点(在MapStruct代码本身)----
我可能做错了,但我注意到在BeanMethodMapping.java中,MapStruct尝试从unprocessedSourceProperties中删除“nestedSource.doubleNestedSourceField”,即使相应属性的键只是unprocessedSourceProperties中的“nestedSource”。因此,“nestedSource”保留为未处理的源属性,并抛出错误。
刚刚转载了这个..请在MapStruct中提出问题。您可以在StackOverflow上参考这个问题。