是的,您可以使用 MapStruct 做到这一点。但是,只能通过明确标记要映射的内容和要忽略的内容。
假设您有以下课程:
public class Car {
private String name;
private int year;
//This is lazy loaded
private List<Wheel> wheels;
//getters and setters omitted for simplicity
}
public class Wheel {
private boolean front;
private boolean right;
//getters and setters omitted for simplicity
}
您将需要一个如下所示的映射器:
@Mapper
public interface CarMapper {
@Mapping(target="wheels", ignore=true)
Car mapWithoutWheels(Car car);
Car mapWithWheels(Car car);
List<Wheel> map(List<Wheel> wheels);
Wheel map(Wheel wheel);
}
如果要强制 MapStruct 创建新对象而不进行直接映射List<Wheel>,则需要 和的显式映射。Wheel目前,如果 MapStruct 发现源类型和目标类型相同,它会直接分配(对于列表,它将创建一个新列表,但不会在列表元素中调用 getter)。
如果Wheel有一些延迟加载的元素,那么您可以有 2 种映射方法Wheel,您将不得不使用基于限定符的选择