java - 从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 的内部概念。
解决方案
您可以尝试定义一个@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);
}
推荐阅读
- python - 在迁移中使用 Django 的`__fake__` 模型类型调用时,无法从`issubclass()` 获得正确的响应
- c - 在 Linux 上使用管道获取用户的进程
- android - 如果我可以用我的 Android 手机读取我的 RFID 标签,这是否意味着我可以模拟我的手机来充当 RFID 标签本身?
- json - ansible 字典键值对
- javascript - 带有 HTML 表的详细信息/摘要标记?
- javascript - 使用 parcel-bundler 构建 webapp 时遇到问题(编译后不加载 Java)
- python - 基于ServiceBus触发Azure函数并回写不起作用(Python)
- ios - 如何使用 Tab Bar 呈现视图控制器
- nginx - Kubernetes Nginx 入口 - 无法确保负载均衡器:找不到任何合适的子网来创建 ELB
- symfony - 如何修复两条相互竞争的 symfony 路由