簡體   English   中英

在另一個映射器方法中使用映射器

[英]using mapper in another mapper method

我想在命名方法的另一個映射器中使用映射器,如何在不使用Mappers.getMapper()的情況下執行此操作?

例子:

@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
        unmappedTargetPolicy = ReportingPolicy.IGNORE,
        uses = {BMapper.class})
public interface AMapper {
//some methods here

@Named("getResultList")
    default List<Result> getResultList(Argument args) {
        BMapper bMapper = Mappers.getMapper(BMapper.class);
        return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
    }

}

@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
        unmappedTargetPolicy = ReportingPolicy.IGNORE
        )
public interface BMapper {
//some methods here
    Result toDto(Arg2 arg2)
}

我知道使用BMapper bMapper = Mappers.getMapper(BMapper.class)componentModel = "spring"不好,但是還有其他選擇嗎? PS 這是一個簡單的示例,但是命名方法中的邏輯可能比所呈現的要復雜得多。 理想情況下,我想在另一個映射器的命名方法中使用映射器

我會說你的方法應該已經工作了 90%。 對我來說,只需進行一些簡單的調整;)。 屬性“uses = BMapper.class”應該可以解決問題。 你所要做的就是復制你的

@Named("getResultList")
default List<Result> getResultList(Argument args) {
    BMapper bMapper = Mappers.getMapper(BMapper.class);
    return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
}

進入另一個映射器(MapperB)。 那么你的結果是

  @Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
    unmappedTargetPolicy = ReportingPolicy.IGNORE,
    uses = BMapper.class)
  public interface AMapper {
    //some methods here
  }

  @Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
  unmappedTargetPolicy = ReportingPolicy.IGNORE)
  public interface BMapper {
    //some methods here
    Result toDto(Arg2 arg2)

    @Named("getResultList")
    default List<Result> getResultList(Argument args) {
      BMapper bMapper = Mappers.getMapper(BMapper.class);
      return args.stream().map(Argument::getArg2).map(bMapper::toDto).collect(Collectors.toList());
    }

在 MapperA 中,您仍然可以通過以下方式訪問“getResultList”方法

qualiviedByName = "getResultList"

照常。

一個小旁注。 當有多個具有相同配置的映射器時,使用 @MapperConfig 注釋可能是有益的。

@MapperConfig(
    componentModel = "spring",
    builder = @Builder(disableBuilder = true),
    // your remaining config here
)
public interface GlobalMappingConfig {
}

並簡單地注釋你的映射器

@Mapper(config = GlobalMappingConfig.class)

或者如果 MapperA

@Mapper(config = GlobalMappingConfig.class, uses = MapperA.class)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM