[英]Mapping DTO to inherited class
我的域名:
public class Moral {
private String moralId;
private String socialReason;
private Framework framework;
}
public class Framework {
private String externalId;
private Set<String> identifiers;
}
public class Lab extends Framework {
private String system;
private String availability;
}
我的 DTO:
public class CreateLabRequest {
private String socialReason;
private Set<String> identifiers;
private String system;
private String availability;
}
我的映射器看起來像:
@Mapping(source = "system", target = "framework.system")
@Mapping(source = "availability", target = "framework.availability")
@Mapping(source = "identifiers", target = "framework.identifiers")
Moral createLabRequestToMoral (CreateLabRequest createLabRequest);
但是,我收到以下錯誤:
目標名稱“framework.system”的類型框架中的未知屬性“系統”。 您指的是 “framework.externalId” 嗎? 類型框架中目標名稱“framework.availability”的未知屬性“可用性”。 您指的是 “framework.externalId” 嗎?
簡單地說,這是不可能的!
也許你想讓Framework繼承自Map ?!
否則,問題是由於您想訪問 class 中沒有它的某些字段!
public class Framework {
private String externalId;
private Set<String> identifiers;
}
public class Lab extends Framework {
private String system;
private String availability;
}
如其所說, extends是指你的Lab class繼承自Framework,也就是說Lab繼承了Framework擁有的所有字段,而不是相反。
話雖這么說:
"framework.system" // cannot be accessed
由於框架中沒有名為“系統”的字段 class
然而:
"lab.externalId" // CAN be accessed
由於實驗室 class 從其父 class“框架”繼承它,盡管實驗室 class 中沒有名為“系統”的字段
關於JAVA inheritance的更多解釋可以在這里找到: https://www.geeksforgeeks.org/inheritance-in-java/
這是可能的,如下所示:
@Mapping( source = ".", target = "framework" )
Moral createLabRequestToMoral( CreateLabRequest createLabRequest );
Lab createLabFramework( CreateLabRequest createLabRequest )
由於Lab
extends Framework
mapstruct 將使用createLabFramework( CreateLabRequest createLabRequest )
,因為它是用戶定義的方法。 此外,由於所有字段的名稱都相同,因此不需要添加那些@Mapping
注釋。
編輯:擴展了一些關於錯誤的信息。
目標名稱“framework.system”的類型框架中的未知屬性“系統”。 您指的是 “framework.externalId” 嗎? 類型框架中目標名稱“framework.availability”的未知屬性“可用性”。 您指的是 “framework.externalId” 嗎?
這基本上是由於 MapStruct 不知道有一個Lab
class 可以擴展Framework
。 MapStruct也可以不知道你要用Lab
class而不是Framework
class。
如上所示,其中一種方法是手動定義一個額外的映射方法來通知 MapStruct 這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.