使用MapStruct将一个POJO转换为另一个POJO,而无需定义该实现



假设我有任意给定数量的pojo,它们都共享相同命名的公共属性。理想情况下,我希望避免使用像

这样定义了多个映射器的大型接口。
DtoA fromBToA(DtoB dtoB)
DtoB fromAToB(DtoA dtoA)
DtoC fromAToC(DtoA dtoA)

对于我将要处理的许多pojo中的每一个。

是否有可能定义一个接口来接受任何对象并返回任何对象?我试着

Object genericMapper(Object object)

这显然是行不通的,因为它不能访问属性来生成代码。

我想因为MapStruct文档中说:

这个实现使用普通的Java方法调用在源对象和目标对象之间进行映射,即没有反射或类似的。

我的请求是不可能的,但我只是想我应该结束,或者是否有其他可行的解决办法。

不幸的是,这是不可能使用MapStruct的

例如,如果你定义了一个泛型映射器

@Mapper(componentModel = "spring")
public interface GenericMapper {
<SOURCE, TARGET> TARGET toTarget(SOURCE source);

}

或者像这样:

@Mapper(componentModel = "spring")
public interface GenericMapper<SOURCE, TARGET> {
TARGET toTarget(SOURCE source);

}

一旦你尝试构建项目,你会得到一个错误:

GenericMapper.java:不能为泛型类型变量源生成映射方法

作为替代解决方案,您可以使用BeanUtils。

参见:通过反射将一个类中字段的所有值复制到另一个类

最新更新