[英]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
中同時使用keysToBeMappedList
和myHashMap
來執行映射。 而且我從未見過在這些 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
用於任何映射。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.