簡體   English   中英

如何使用依賴於多個 DTO 變量的 mapstruct 執行映射

[英]How to perform a mapping with mapstruct that is dependant on more than one DTO variable

我正在使用 mapstruct 到 map 我的 DTO 到其對應的實體。

DTO 包含一個 Hashmap 變量,其條目應該映射到特殊 HashMap 實體的鍵和值變量。 這就是為什么我用一種額外的方法來描述這個映射,如下所示:

@Mapper
public interface MyMapper {

      MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

      @Mapping(source = "myHashMap", target = "myHashMapEntityList", qualifiedByName = "mapMyHashMap")
      MyEntity mapToEntity(MyDTO dto);

      @Named("mapMyHashMap")
      static List<myHashMapEntity> mapMyHashMap(final Map<String, String> myHashMap) {
          ...
      }
}

這工作正常。 我唯一的問題是我不想 map hashmap 的所有條目。 我只想 map 條目,其中的鍵包含在列表keysToBeMappedList中。 雖然可以從dto構造這個keysToBeMappedList ,但這個變量不是 dto 的一部分。 我想知道如何執行我的映射。

我的問題:

是否可以在此MyMapper接口中計算此keysToBeMappedList ,然后在mapMyHashMap方法中使用此列表? 因為即使這是不可能的並且我將keysToBeMappedList作為我的 dto 的一部分,我仍然必須在mapMyHashMap中同時使用keysToBeMappedListmyHashMap來執行映射。 而且我從未見過在這些 mapstruct 方法中使用了多個變量。

我希望我想做什么或多或少清楚。 有人可以幫忙嗎?

您可以使用表達式來調用任何方法

  MyEntity mapToEntity(MyDTO dto, List<String> list);



 @Mapping(target = "name", expression = "java(mapMyHashMap(map, list))")

否則,如果您不需要配置它,只需在方法中對其進行硬編碼並過濾掉

可以在方法中添加更多 arguments:

import org.mapstruct.Context;
@Mapper
public interface MyMapper {

      MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

      @Mapping(source = "myHashMap", target = "myHashMapEntityList", qualifiedByName = "mapMyHashMap")
      MyEntity mapToEntity(MyDTO dto, @Context List<String> keysToBeMappedList);

      @Named("mapMyHashMap")
      static List<myHashMapEntity> mapMyHashMap(final Map<String, String> myHashMap, @Context List<String> keysToBeMappedList) {
          ...
      }
}

mapToEntity方法的實現現在會將keysToBeMappedList傳遞給mapMyHashMap方法,但 mapstruct 不會嘗試將keysToBeMappedList用於任何映射。

您可以在此處找到有關 @Context 的更多信息。

暫無
暫無

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

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