mapstruct是否允许从父对象检测正确的子映射器?
我们有多个扩展父类的类,我们想要一种自动找到正确映射器的方法。
我想到的解决方案涉及映射器类的映射,并在检查对象类或类型时加载正确的映射。另一种解决方案是使用复杂的switch case,或者使用每个可能的子类的实例。
模型示例:
public class ParentClass{
String getType();
}
public class ChildClass1 extends ParentClass{
}
public class ChildClass2 extends ParentClass {
}
到这个dto模型:
public class ParentClassDto{
String getType();
}
public class ChildClass1Dto extends ParentClassDto{
}
public class ChildClass2Dto extends ParentClassDto {
}
在一对一的情况下,一切都很好(ChildClass1-
我们当前的解决方案涉及一个具有以下映射器的映射:
@Mapper
public interface ParentClassMapper{
ParentClassDto convertToDto(ParentClass p);
ParentClass convertDTOToModel(ParentClassDto dto);
}
@Mapper
public interface ChildClass1Mapper implements ParentClassMapper
找到正确的地图:
public class MapperFinder{
static Map<String, ParentClassMapper> map;
static {
map = new HashMap<>();
map.put("ParentClassType", ParentClassMapper.class);
map.put("ChildClass1Type", ChildClass1Mapper.class);
map.put("ChildClass2Type", ChildClass2Mapper.class);
}
public ParentClassDto mapModelToDTO(ParentClass p){
Class mapperClass = map.get(p.getType);
MyMapper mapper = Mappers.getMapper( mapperClass );
return mapper.convertToDto(p);
}
public ParentClass mapDTOToModel(ParentClassDto dto){
Class mapperClass = map.get(dto.getType);
MyMapper mapper = Mappers.getMapper( mapperClass );
return mapper.convertDTOToModel(dto);
}
}
使用将在服务中
@Autowired
MapperFinder mapperFinder;
public void save (ParentClass pc){
(pc is a instance of child ChildClass1)
...
ParentClassDto dto = mapperFinder.mapModelToDTO(pc);
repo.save(dto);
...
}
还有别的办法吗?
看看回购示例上的这个示例(仍然是PR)。它提出了一个标准的映射器接口和一个存储库功能,以(或多或少)实现您想要的。
我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好
问题内容: 阅读了这篇JPA地图关系实体parentID后,我尝试将其应用于我的代码,但这对我不起作用。 这是我对象中的代码 现在这是我运行的测试 此测试行始终失败。 基于我的关系设置,Hibernate无法检索该子类别,我也不知道为什么。现在我真的很希望这对我来说不是什么愚蠢的事情,因为我会自己开枪(即使是很晚并且很累)。顺便说一下,不要介意代码中的公共变量,我正在使用play!(playfra
我需要将多个dto映射到实体。几乎所有的dto都有一个指向另一个dto的引用,我不知道在映射dto时如何传递引用。 以下是该地址的一个业务实现: 这是地图绘制者 所有实现者都从同一个dto读取,然后将它们映射到dto和entites。 以下是针对客户实施的建议: 以及我希望引用映射地址实体的映射(我的客户实体有一个地址类型字段)。 非常感谢你。
我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...
我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!
我有如下目标实体: 源对象如下所示: