我有一个相当大的bean(~100个属性)被映射到几个较小的对象。可能会出现较小的目标对象具有与我的源bean中的名称相同的属性,但不具有相同的语义含义。
我希望MapStruct在这种特定情况下表现出来,只映射我使用@Mapping
注释明确指出的内容而不执行通常的自动映射。
MapStruct documentation告诉我这个:
在生成的方法实现中的所有可读属性 源类型(...)将被复制到相应的属性中 在目标类型(...)。
我没有找到任何配置选项关闭此行为。 可以吗?
答案 0 :(得分:3)
如Mohamed的评论中所述,您可以明确忽略这些属性。
您所描述的没有开关。就个人而言,我可能会手工编写特定的映射,而不是通过注释显式配置所有映射。当然,您仍然可以从类型转换等中受益,因此它可能仍然有用,它实际上取决于您的使用案例。
答案 1 :(得分:2)
从MapStruct 1.3开始,可以通过@BeanMapping(ignoreByDefault = true)
映射方法注释关闭隐式字段映射。摘自MapStruct 1.3.1参考指南:
通过@BeanMapping(ignoreByDefault = true)的默认方式 行为将是显式映射,这意味着所有映射都必须 通过@Mapping指定,并且不会发出警告 缺少目标属性。
答案 2 :(得分:-1)
我有类似的问题,就像你说的那样,我用装饰器解决了它
@Mapper
@DecoratedWith(PersonMapperDecorator.class)
public interface PersonMapper {...}
请参阅文档(MapStruct 1.2.0.Final参考指南),章节:12。自定义映射
我希望它对你有用