[英]Mapstruct: custom mapping method for nested objects
我想使用 mapstruct 在這些對象之間進行映射:
MyObj1
-List<MyObj2> myObj2List
--List<MyObj3> myObj3List
---string field1
MyObj4
-List<MyObj5> myObj5List
--List<MyObj6> myObj6List
---int field1
問題:我可以以某種方式告訴 mapstruct 將 field1 從字符串映射到 int 其他方式而不是默認的Integer.parseInt(...)
嗎?
更改內部對象的類型不是一種選擇。 我知道有一個注釋
@Mapping(source = "myObj2List.myObj3List.field1", target = "myObj5List.myObj6List.field1", qualifiedByName = "methodToMapWith")
public MyObj4 field1Mapper(MyObj1input);
@Named("methodToMapWith")
public static int methodToMapWith(string input) {
return ...[custom logic]...;
}
但由於這些是嵌套對象,因此我收到一條錯誤消息,指出No property named "myObj2List.myObj3List.field1" exists in source parameter(s).
我一定是錯誤地制定了來源。 請問有什么幫助嗎?
您正在嘗試定義集合的映射。 MapStruct 不支持此功能。
使用時
@Mapping(source = "myObj2List.myObj3List.field1", target = "myObj5List.myObj6List.field1", qualifiedByName = "methodToMapWith")
你實際上是告訴MapStruct你想要的屬性myObj3List
從myObj2List
使用。 然而, myObject2List
不是一個 bean,而是一個集合。
您實際上是要告訴 MapStruct 將映射傳遞給為單個元素創建的可迭代映射。
我認為有一個功能請求來支持這樣的事情。
為了支持你需要的東西,你需要在不同的對象之間添加映射方法。
例如
@Mapping(source = "myObj2List", target = "myObj5List")
public MyObj4 field1Mapper(MyObj1 input);
@Mapping(source = "myObj3List", target = "myObj6List")
public MyObj5 map(MyObj2 input);
@Mapping(target = "field1", qualifiedByName = "methodToMapWith")
public MyObj6 map(MyObj3 input);
@Named("methodToMapWith")
public static int methodToMapWith(string input) {
return ...[custom logic]...;
}
當target
和source
相同時,您不必定義它們,您只需定義target
和qualifiedByName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.