- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,如果这个问题已经被提出,请允许我道歉。我在 StackOverflow 中找不到任何引用。
我试图通过 MapStruct 在 bean 之间的映射中使用限定,以便通过限定映射在列表之间进行转换。唉,没有成功。
假设我们有以下类(尽可能简化,并且我将省略明显的 getter/setter):
public class A {
private String propertyA;
}
public class B {
private String propertyB;
private A instanceA;
}
public class C {
private List<B> instancesB;
}
public class A1 {
private String propertyA;
}
public class B1 {
private String propertyB;
private A1 instanceA1;
}
public class C1 {
private List<B1> instancesB1;
}
让我们假设有以下限定符:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface Full{}
我们还假设有以下映射:
@Mapper
public interface MapperA {
A1 toA1(A a);
A toA(A1 a1);
}
@Mapper
public interface MapperB {
B1 toB1(B b);
@Mapping(source="propertyA", target="propertyA1")
@Full
B1 toB1Full(B b);
@IterableMapping(qualifiedBy=Full.class)
@Full
List<B1> toB1s(List<B> bs);
toB(B1 b);
@Mapping(source="propertyA1", target="propertyA")
@Full
toBFull(B1 b);
@IterableMapping(qualifiedBy=Full.class)
@Full
List<B> toBs(List<B1> bs);
}
@Mapper
public interface MapperC {
<HERE IS THE PROBLEM>
}
如何编写 Mapper C 以便对 B 的迭代实例使用完整映射?
无论我如何尝试编写映射的注释,例如
@Mapping(source = "instancesB1", target="instancesB", qualifiedBy=Full.class)
我总是发现自己的映射实体不完整:B1 实例具有正确映射的 propertyB
字段,但没有 instanceA1
。
我当然可以将 MapperC
编写为抽象类,实现该方法,手动调用映射器并对此感到满意,但我怀疑是否可以以某种方式进行注释MapperC 中的方法并让 Mapstruct 自动为我使用正确的映射方法(因为这是一个过于简单的情况,但我可能有数十个这样的列表需要转换)。
感谢您的关注。
最佳答案
不确定您是否尝试过,但从示例来看,似乎缺少 Mapper#uses
。
在您的情况下,它应该看起来像(省略映射方法):
@Mapper
public interface MapperA {
}
@Mapper(uses = MapperA.class)
public interface MapperB {
}
@Mapper(uses = MapperB.class)
public interface MapperC {
}
当您使用Mapper#uses
时,MapStruct将在uses
中定义的类中查找合格的方法。但是,如果您没有,那么 MapStruct 就无能为力,并且会生成一些默认映射。
关于java - Mapstruct:使用合格的 IterableMapping 映射列表属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483155/
我可以在我们有 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 类,它被称为源
我是一名优秀的程序员,十分优秀!