mapstruct 映射器中的附加参数

The*_*tle 7 java mapstruct

我有车:

  • ID
  • 品牌
  • 模型
  • 所有者

还有CarDTO:

  • ID
  • 品牌
  • 模型

在我的服务类中,我传递了附加参数“所有者”,并且我需要转换列表。

是否可以将“所有者”添加到Mapper?

如果是,那么我想它应该与此类似(不起作用)。

@Mapper
public interface CarMapper {

@Mapping(target = "owner", source = "owner")
List<Car> mapCars(List<CarDTO> cars, String owner);
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*oni 7

正如答案中所述,您可以使用@Context.

首先添加单个对象映射方法:

@Maping(target = "owner", source = "owner")
Car mapCar(CarDTO car, String owner);
Run Code Online (Sandbox Code Playgroud)

然后定义一个用于映射对象列表的方法@Context

List<Car> mapCars(List<CarDTO> cars, @Context String owner);
Run Code Online (Sandbox Code Playgroud)

由于@Context参数并不打算用作源参数,因此应添加代理方法以将 MapStruct 指向正确的单个对象映射方法以使其正常工作。

最后添加代理方法:

default Car mapContext(CarDTO car, @Context String owner) {
    return mapCar(car, owner);
}
Run Code Online (Sandbox Code Playgroud)