mapstruct 映射器中的附加参数

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

我有车:

  • id
  • 品牌
  • 型号
  • 楼主

还有CarDTO:

  • id
  • 品牌
  • 型号

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

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

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

@Mapper
public interface CarMapper {

@Mapping(target = "owner", source = "owner")
List<Car> mapCars(List<CarDTO> cars, String owner);
}
java mapstruct
3个回答
4
投票

答案中所述,您可以使用

@Context

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

@Maping(target = "owner", source = "owner")
Car mapCar(CarDTO car, String owner);

然后定义一个方法来映射对象列表

@Context
:

List<Car> mapCars(List<CarDTO> cars, @Context String owner);

因为

@Context
参数并不意味着用作源 参数,应该添加一个代理方法来将MapStruct指向 正确的单一对象映射方法使其工作。

最后添加代理方法:

default Car mapContext(CarDTO car, @Context String owner) {
    return mapCar(car, owner);
}

0
投票

是的,这是可能的。您可以尝试在“owner”之前添加

@Context
注释

我会建议这样的事情:

@Mapper
public interface CarMapper {

@Maping(target = "owner", source = "owner")
Car mapCar(CarDTO car, @Context String owner);

@Maping(target = "owner", source = "owner")
List<Car> mapAllCars(List<CarDTO> cars, @Context String owner);

@AfterMapping
default void afterMapping(@MappingTarget Car target, @Context String owner) {
    target.setOwner(owner);
}

有多种方法可以解决您的问题。您还可以查看将附加参数传递给 MapStruct 映射器


0
投票

我什至不需要使用上下文。我可以简单地传递附加参数,映射器会在构建中识别它。

    NotMORV2Entity toNotMorV2Entity(ReEntity reEntity, int glAccountTypeId);
© www.soinside.com 2019 - 2024. All rights reserved.