簡體   English   中英

Spring MVC-用於繼承層次結構的REST端點

[英]Spring MVC - REST endpoint for inheritance hierarchy

我正在為類層次結構使用JOINED繼承策略,如下所示:

abstract super class Product

concrete sub class Type1Product extends Product

concrete sub class Type2Product extends Product

現在,我想創建一個REST端點,該端點允許用戶發布數據,並將其解析為產品的特定子類,並確保它對於任何類型的產品都具有相同的端點。 因此,如下所示:

@RequestMapping(method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public Product save(@Valid Product product) {
        // ...
        return product;
    }

當前,當我嘗試發布時,我收到一條錯誤消息,提示我無法初始化抽象類,因為Spring試圖創建一個Product實例,而不是正確的子類型的實例。

我想做的事可能嗎? 如果不是,那么在為繼承層次結構創建這樣的端點時,最佳實踐或慣例是什么?

讓我們看看您要做什么,正在嘗試反序列化一個對象,並告訴jackson它的Product是您的抽象類,並且您希望jackson自己找到具體的類。

這是無法實現的,並且說得通,可以說傑克遜可以根據附加屬性來找出哪個具體類,好吧,所以假設我們有兩個沒有附加屬性的具體類,傑克遜將如何找出這是什么具體的課程?

當指定反序列化的類時,將調用默認構造函數,因此,如果您的類是抽象類,將不起作用,則需要每個具體類的終結點,或者需要DTO和模型映射器,DTO可以包含具體類和所有可能的屬性並且您的模型映射器應該依賴於DTO中指示的具體類,使用這種方法,您可以在一個端點中完成此操作。

暫無
暫無

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

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