5

我有一个相当大的 bean(约 100 个属性),它被映射到几个较小的对象中。较小的目标对象可能具有与我的源 bean 中的名称相同的属性,但语义不同。

我希望MapStruct在这种特定情况下仅映射我使用@Mapping注释明确告知的内容,而不执行通常的自动映射。

MapStruct文档告诉我这个:

在生成的方法实现中,源类型 (...) 中的所有可读属性都将复制到目标类型 (...) 中的相应属性中。

我没有找到任何关闭此行为的配置选项。可以做到吗?

4

3 回答 3

4

@BeanMapping(ignoreByDefault = true)从 MapStruct 1.3 开始,可以通过映射方法注释关闭隐式字段映射。来自 MapStruct 1.3.1 参考指南:

通过@BeanMapping(ignoreByDefault = true),默认行为将是显式映射,这意味着必须通过@Mapping 指定所有映射,并且不会在缺少目标属性时发出警告。

于 2020-02-11T11:35:18.563 回答
3

正如 Mohamed 的评论中所述,您可以明确忽略这些属性。

没有你描述的开关。就个人而言,我可能会手动编写特定的映射,而不是通过注释显式配置所有映射。当然,您仍然可以从类型转换等中受益,因此它可能仍然是有益的,这实际上取决于您的用例。

于 2016-01-06T11:46:49.437 回答
-1

我有一个类似的问题,就像你说的,我用装饰器解决了它

@Mapper
@DecoratedWith(PersonMapperDecorator.class)
public interface PersonMapper {...}

请参阅文档(MapStruct 1.2.0.Final Reference Guide),章节:12. 自定义映射

我希望它也对你有用

于 2018-03-28T16:23:37.827 回答