假设我有任意给定数量的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。
参见:通过反射将一个类中字段的所有值复制到另一个类