首页 > 解决方案 > 从mapstruct收到错误“目标属性的几个可能的源属性”时如何避免显式映射?

问题描述

我有 mapstruct Mapper 的实现如下

@Mapper
public interface MyMapper extends Serializable {
    MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

    //@Mapping(target = "status", source = "p1.status")
    MergedPojosClass from(Pojo1 p1, Pojo2 p2);
}

在目标类中,我有字段状态,但这个字段在两个 pojo 类中都可用。对于我的 pojo,我使用 lombok 来生成 setter、getter 和各种构造函数。

没有注释行,我收到以下错误:

错误:(20, 14) java: 目标属性“状态”的几个可能的源属性。

我可以通过添加一些说明 Pojo1 具有更高优先级的注释来避免上述样板文件(显式映射)吗? 我正在研究 Java 文档以及 mapstruct 的源代码,但没有任何可以帮助我的例子或线索。我试图用 InheritanceStrategy 找到一些东西,但它看起来很像 mapstruct 的内部概念。

标签: javalombokmapstruct

解决方案


您可以尝试定义一个@MapperConfig. 不确定它是否有效

所以像这样:

@MapperConfig
public interface MyConfig {
    @Mapping(target = "status", source = "p1.status")
    MergedPojosClass from(Pojo1 p1);
}

@Mapper(config = MyConfig.class, mappingInheritanceStrategy=MappingInheritanceStrategy.AUTO_INHERIT_ALL_FROM_CONFIG)
public interface MyMapper extends Serializable {
    MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

    // here's the doubt.. I'm not sure that in 2 arg mapping the config is used
    MergedPojosClass from(Pojo1 p1, Pojo2 p2);
}

推荐阅读