- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
mapstruct 是否允许从父对象检测右子映射器?
我们有多个扩展父类的类,并且我们希望有一种方法来自动找到正确的映射器。
我想到的解决方案涉及映射器类的映射,并在检查对象类或类型时加载正确的映射器类。另一种解决方案是使用一个复杂的 switch case 或 if else 以及每个可能的子类的实例。
模型示例:
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 -> ChildClass1Dto 与 ChildClass1Mapper 或 ChildClass2 -> ChildClass2Dto 与 ChildClass2Mapper)
我们当前的解决方案涉及带有映射器的 map ,如下所示:
@Mapper
public interface ParentClassMapper{
ParentClassDto convertToDto(ParentClass p);
ParentClass convertDTOToModel(ParentClassDto dto);
}
@Mapper
public interface ChildClass1Mapper implements ParentClassMapper
找到合适的 map :
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);
...
}
还有其他方法可以做到这一点吗?
最佳答案
看看this示例存储库中的示例(仍然是 PR)。它提出了一个标准的映射器接口(interface)和一个存储库功能来(或多或少)实现您想要的。
关于java - 如何在父对象上使用mapstruct来检测正确的子映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261563/
我可以在我们有 String 到 Enum 映射的地方找到答案,但我找不到如何将 Enum 映射到 String。 public class Result { Value enumValue; }
我想使用 MapStruct 映射一个没有源对象的 Target 对象。我试过了,但出现以下错误。 Can't generate mapping method with no input argume
我在单独的文件中有这 3 个类 public class Book { @Id @GeneratedValue private Long id; @NonNull
如何使用 MapStruct 对于以下场景进行 bean 映射。 class Source { private String sourceId; private List courses; //al
是否可以在针对目标 bean 中字符串类型的 bean 属性设置字符串值之前对其进行修剪? 例如,Dozer 通过其映射配置提供了这样的功能, true 另见 Dozer Global C
我收到编译错误: com/mycompany/hibernate5/Main.java:[10,46] cannot find symbol symbol: class Customer_
目前我们在项目中使用 ModelMapper。但是,在该站点中,我看到很多人喜欢 MapStruct。 不确定差异以及我们是否需要真正进行升级。 ModelMapper 和 MapStruct 有什么
我正在使用 map 结构用于在我的 中将 Dto 映射到实体,反之亦然 Spring Boot 应用。 I want to know that, is there a way that i can m
如何在 MapStruct 中完全禁用“构建器”?我根本不想使用它们,因为它们给我带来了各种各样的问题。 我在 META-INF 下创建了服务文件(我更喜欢一种将它分配给映射构建器 = 的方法,但我没
@Mapper @Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码。 public @interface Mapper { // 引入其他其他映射器 Class&
我在其他地方看到过这个问题,但不是在相同的上下文中,也没有适合我们用例的答案。 假设我在源对象中有一个列表字段: List mySourceList; 和相应的目标字段: List myTargetL
我在 MapStruct 中使用 spring data jdbc。 POJO 与具有所有“仅限内部”数据(如代理键、审计信息等)的表结构保持一致,而域对象是分层的并且仅包含业务相关数据。我必须在特定
页面信息 public class PageInfoDto implements Serializable { private int currentPageNum; private
在 MapStruct 版本 1.1.0.Final 中,这是可能的.... @Mappings({ @Mapping(target = "transaction.process.detail
我有一个 list List我想映射到另一个列表 List .这些类型如下所示: public class Payment { @XmlElement(name = "Installment"
我要单例Mapper两者兼而有之 create和 update方法。 create 方法生成的代码很好,但是在更新的情况下,我想在目标中设置属性,前提是它们在源中不为空。 我该怎么做 mapStruc
我想使用 mapstruct 在这些对象之间进行映射: MyObj1 -List myObj2List --List myObj3List ---string field1 MyObj4 -List
如何映射以下内容: class Source { String name; List others; } class Other { String otherName; Lis
我想映射以下类 class Schedule { ZoneId timezoneId; List rules; } class AvailabilityRule { long
我是 MapStruct API 的新手,谁能说一下如何进行嵌套映射。 我有两个类,一个是我实际的purchaseOrder 类,它是我的目标类,另一个是EDPurchaseOrder 类,它被称为源
我是一名优秀的程序员,十分优秀!