当前位置: 首页 > 知识库问答 >
问题:

当从MapStruct收到错误“目标属性的几个可能源属性”时,如何避免显式映射?

麻超
2023-03-14

我有mapstruct映射器的实现如下

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

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

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

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

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

共有1个答案

柴彬
2023-03-14

您可以尝试定义@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);
}
 类似资料:
  • 我正在从ModelMapper到MapStruct的转换过程中,到目前为止一切都很顺利,除了在列表上排序和筛选的情况,如果我有一个从域对象到实体的映射,例如: 从一个api中,我想在contactAddressLine1上进行过滤或排序,然后我想查找源代码(或反向映射时的目标代码),以便将其添加到动态jpq或sql查询中。 有没有办法用MapSTRt做到这一点? 使用ModelMapper,我可以

  • 我们希望能够将未映射的SourcePolicy设置为ReportingPolicy. ERROR,以便默认情况下丢失的源会大声失败。但是,有时源对象模型包含与目标无关的内容。因此,我们希望能够执行以下操作: 可以对目标执行类似操作。如果我尝试上述操作,我会得到错误,因为映射中需要目标。

  • 我有以下DTO和域对象。我正在使用Mapstruct将域对象复制到DTO对象。 使用下面的映射器将域映射到DTO。我不想将电话属性从域映射到DTO。怎么做?我尝试在mapping ignore中提供嵌套目标属性,但它给出了错误:

  • 我想从属性文件中加载源的名称和目标的tgName。 像这样的东西

  • 在我的代码中,我处理一个数组,该数组中有一些条目,其中许多对象嵌套在另一个条目中,而有些条目则没有。它看起来如下所示: 这给我带来了问题,因为我有时需要遍历数组,而不一致性给我带来了如下错误: 我知道我可以说,但是当有多达5或6个对象相互嵌套时,这是非常乏味的。有没有其他(更简单)的方法,我可以让它只做console.log,如果它存在,但不抛出一个错误?

  • 我需要将源类中的字段值映射到字段属性。我可以使用Mapstruct使用@mapper注释的'expression'参数来完成 有没有其他方法可以不使用“表达式”来进行映射?