带有表达式的Mapstruct嵌套bean

问题描述 投票:0回答:1

我希望设备 bean 将每个属性设置为目标 bean,如文档中所示。这里出了什么问题?

如果您不想显式命名嵌套源 bean 中的所有属性,您可以使用 .作为目标。这将告诉 MapStruct 将每个属性从源 bean 映射到目标对象。下面是一个例子:

  @Mapping(target = ".",  qualifiedByName = "device")
  public abstract ClientRegisterDeviceRequest toDeviceRequest(RegisterDeviceRequest registerDeviceRequest);

  @Named("device")
  public DeviceInfo getDevice() {
    return DeviceInfoService.get();
  }
mapstruct
1个回答
0
投票

我不确定你想在这里实现什么目标。但是,使用

@Mapping(target = ".")
需要定义
source
。否则,MapStruct 无法知道它需要映射什么。

我建议做的是这样的:

也许你需要这样的东西:

@Mapper
public abstract class MyMapper {

    public ClientRegisterDeviceRequest toDeviceRequest(RegisterDeviceRequest registerDeviceRequest) {
        return toDeviceRequest(regusterDeviceRequest, DeviceInfoService.get());
    }

    @Mapping(target = ".", source = "device")
    protected abstract ClientRegisterDeviceRequest toDeviceRequest(RegisterDeviceRequest registerDeviceRequest, DeviceInfo device);

}
© www.soinside.com 2019 - 2024. All rights reserved.