是否可以告诉MapStruct不执行自动映射?

时间:2016-01-06 09:26:46

标签: java object-object-mapping mapstruct

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

我希望MapStruct在这种特定情况下表现出来,只映​​射我使用@Mapping注释明确指出的内容而不执行通常的自动映射。

MapStruct documentation告诉我这个:

  

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

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

3 个答案:

答案 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。自定义映射

我希望它对你有用