Java 列表类型的对象上的MapStruct映射
我尝试将MapStruct用于类似于以下内容的结构:Java 列表类型的对象上的MapStruct映射,java,mapstruct,Java,Mapstruct,我尝试将MapStruct用于类似于以下内容的结构: @Data public class ClassAEntity { private int id; private String name; private String numT; private List<ClassBEntity) bs; } @Data public class ClassBEntity { private int id; private String name; private S
@Data
public class ClassAEntity {
private int id;
private String name;
private String numT;
private List<ClassBEntity) bs;
}
@Data
public class ClassBEntity {
private int id;
private String name;
private String numT;
private List<Other> oc;
}
@Data
public class ClassA {
private int id;
private String name;
private List<ClassB) bs;
}
@Data
public class ClassB {
private int id;
private String name;
private List<Other> oc;
}
另一方面,我需要忽略classBEntity的参数oc,因为“other”对象包含classAEntity并形成一个循环对象。(因为我使用oneToMany JPA)。我尝试了以下方法:
@Data
public class ClassAEntity {
private int id;
private String name;
private String numT;
private List<ClassBEntity) bs;
}
@Data
public class ClassBEntity {
private int id;
private String name;
private String numT;
private List<Other> oc;
}
@Data
public class ClassA {
private int id;
private String name;
private List<ClassB) bs;
}
@Data
public class ClassB {
private int id;
private String name;
private List<Other> oc;
}
@Mapping(target=“bs[].oc”,ignore=true)
感谢您的帮助MapStruct不支持为集合定义嵌套映射。您必须定义更明确的方法 例如,要将
numT
映射到bs[].numT
并忽略bs[].oc
您需要执行以下操作:
@Mapper
public MyMapper {
default ClassAEntity map(ClassA classA, String numT) {
return map(classA, numT, numT);
}
ClassAEntity map(ClassA classA, String numT, @Context String numT);
@AfterMapping
default void setNumTOnClassBEntity(@MappingTarget ClassBEntity classB, @Context String numT) {
classB.setNumT(numT);
}
@Mapping(target = "oc", ignore = "true")
ClassBEntity map(ClassB classB);
}
MapStruct不支持为集合定义嵌套映射。您必须定义更明确的方法 例如,要将
numT
映射到bs[].numT
并忽略bs[].oc
您需要执行以下操作:
@Mapper
public MyMapper {
default ClassAEntity map(ClassA classA, String numT) {
return map(classA, numT, numT);
}
ClassAEntity map(ClassA classA, String numT, @Context String numT);
@AfterMapping
default void setNumTOnClassBEntity(@MappingTarget ClassBEntity classB, @Context String numT) {
classB.setNumT(numT);
}
@Mapping(target = "oc", ignore = "true")
ClassBEntity map(ClassB classB);
}