簡體   English   中英

將 DTO 映射到繼承的 class

[英]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.

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