簡體   English   中英

應該從哪里讀取JsonSubTypes?

[英]Where should the JsonSubTypes be read from?

這個問題與我之前發布的另一個問題無關,因為我正在尋找有關JsonSubTypes的序列化/驗證如何工作的清晰信息

另一個問題: 使用JsonSubTypes的InvalidSchemaException,而不是我在基本接口中定義的內容

假設我有一個基類A

一個實現BaseInterface

如果我有一個子類B擴展了A ,但實現了它自己的接口,例如AlpahInterface,BetaInterface,CharlieInterface 這里存在問題,因為驗證失敗,因為AlphaInterface僅列出了例如LAMA,因此驗證不了解基本BaseInterface中定義的所有其他類型。

子類B僅實現AlphaInterface定義的任何內容 ,而忽略了它擴展BaseInterface的事實,也忽略了其他已實現的接口,並且顯然沒有注意B擴展了實現BaseInterface的事實。 我可以驗證這一點,因為我向AlphaInterface添加了基本接口中定義的所有子類型,並且一切正常,但是我不想在每個接口中都定義所有可能的子類型,因為它們與實現它們的類並不都相關。

我本以為將選擇擴展的A實現或所有B的實現接口,而不僅僅是清單中的第一個接口。

請有人解釋,因為我過去兩天在網上所做的所有閱讀都還沒有為我解決。 如果有人想打開討論聊天,那就太好了!

謝謝。

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
  @Type(value = CatTopic.class, name = "CAT"),
  @Type(value = DogTopic.class, name = "DOG"),
  @Type(value = FishTopic.class, name = "FISH"),
  @Type(value = LamaTopic.class, name = "LAMA")
})
public interface BaseInterface {}

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
  @Type(value = LamaTopic.class, name = "LAMA")
})
public interface AlpahInterface extends BaseInterface {}


// Something to extend A
public class B extends A implements AlpahInterface, BetaInterface, CharlieInterface {}

我不清楚在JsonSubTypes的主要列表中應在何處讀取此代碼,但我設法解決了相關的發布問題。 最終在我的相關文章中找到了處理主要問題的方法。 公共抽象@interface JsonTypeInfo

對於JsonSubTypes中定義的每個類,需要做的是,還必須在該類@JsonTypeName(“ ClassName”)上指定,例如

@JsonTypeName("CAT")
public class CatTopic extends A implements AlpahInterface, BetaInterface, CharlieInterface {}

暫無
暫無

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

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