我有一个场景,我必须使用Mapstrt将资源
对象(来自网络请求)转换为RealmObject
对象(数据层)来处理对象映射。我正在尝试创建一个通用的Mapper
接口,以防止必须为每个资源定义自定义映射器,如下所示:
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import io.realm.RealmObject;
import moe.banana.jsonapi2.Resource;
@Mapper
public interface ResourceMapper <T extends Resource, I extends RealmObject> {
ResourceMapper INSTANCE = Mappers.getMapper(ResourceMapper.class);
I resourceToRealm(T resource);
}
但这会导致构建错误(但是编译成功):
错误:(13,4)错误:无法为泛型类型变量源生成映射方法。
这不可能吗?如果没有,我将不得不为每个资源
创建一个自定义映射器,并使用开关
根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得丑陋,不会产生非常枯燥的代码。他们的文件对此不是很清楚。
编辑1:
从文档,
生成的实现使用普通Java方法调用在源对象和目标对象之间进行映射,即不涉及反射。默认情况下,如果属性在源和目标中具有相同的名称,则会对其进行映射,但可以使用@Mapping和一些其他注释来控制这一点和许多其他方面。
我怀疑是否有可能签订这样的地图绘制合同。我们无法判断自动生成的结果将实例化哪种类型。
有两个预期结果
如果你想得到第二个结果,请按照以下步骤进行
我想将泛型类型<code>Y</code>的对象映射到另一个泛型类型为<code>X</code>的对象。在mapstruct中有这样的功能吗?或者我必须为通用映射编写自定义映射器吗?当我编译上面的代码时,会出现编译错误。
试图在我的业务模型中使用值对象时,我遇到了以下代码的问题: 是否有一种通用的方法来声明(string->ValueObject)映射方法?
我不熟悉Mapstruct,在特定用例中遇到问题 因此,如果我的来源属性hotmail.com我的目标属性应该收到“个人”,如果我的来源facebook.com我的目标应该收到“公司”。 我想用表达法,但没法绕过它。我该怎么做?
我试图使用http://modelmapper.org/表示DAO和模型类的库- 模型类- 道类- 公共类主题{私有字符串名称; 映射逻辑 ModelMapper似乎不起作用,它给我提供了主题类项目,而不是主题模型类项目