亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將主類作為 JsonSubTypes 中的類型調用

將主類作為 JsonSubTypes 中的類型調用

弒天下 2023-12-30 16:07:25
有沒有辦法使用杰克遜注釋來調用同一個類作為類型@JsonSubTypes?解釋如下:我創建了這個具有許多子類型的大師類@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type" )@JsonSubTypes( { @Type( value = FirstClass.class, name = "first" )                ,@Type( value = SecondClass.class, name = "second" )                ,@Type( value = ThirdClass.class, name = "third" ) } )@Datapublic abstract class Master {    public String name;}對于三個類(FirstClass、SecondClass 和 ThirdClass),它們包含不同的屬性,在我的代碼中我有 4 個不同的條件if ( inputClass instanceof FirstClass){...}else if ( inputClass instanceof SecondClass){...}else if ( inputClass instanceof ThirdClass){...}else if ( inputClass instanceof Master ){...}我擔心的是最后一個條件,其中inputClass 只有name和type屬性,沒有像其他情況一樣的其他字段,所以我嘗試通過將其添加到 JsonSubTypes 中來創建一個新類型@Type( value = Master.class, name = "fourth" )我把第四個條件改成了這個if ( inputClass instanceof Master ){...}但是當我使用此輸入發送休息請求時{    "name":"test",    "type":"fourth"}我收到此錯誤:JSON解析錯誤:無法構造com.test.Master的實例,問題:抽象類型需要映射到具體類型,具有自定義反序列化器,或者使用附加類型信息進行實例化;嵌套異常是 com.fasterxml.jackson.databind.JsonMappingException:無法構造 com.test.Master 的實例看來我需要創建一個沒有屬性的類來將其用作類型而不是使用 master,我不知道是否有更好的解決方案這是所使用的類的示例(第一、第二和第三)@Data@EqualsAndHashCode( callSuper = true )@JsonTypeName( "FirstClass" )public class FirstClass extends Master {    public FirstClass() {     }    private String attributeA = null;    //attributeB for SecondClass and attributeC for ThirdClass}
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

嘗試這個


@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type" )

@JsonSubTypes( { @Type( value = FirstClass.class, name = "first" )

                ,@Type( value = SecondClass.class, name = "second" )

                ,@Type( value = ThirdClass.class, name = "third" ) } )

public class Master {


    public String name;

}

if ( master instanceof FirstClass){

...

} else if ( master instanceof SecondClass) {

...

} else if ( master instanceof ThirdClass){

...

} else if ( master instanceof Master ){

...

}

并使用此請求來調用主條件


{

    "name":"test",

    "type":"Master"

}

編輯:您可以使用 @JsonTypeName 作為特定名稱


@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type" )

@JsonSubTypes( { @Type( value = FirstClass.class, name = "first" )

                ,@Type( value = SecondClass.class, name = "second" )

                ,@Type( value = ThirdClass.class, name = "third" ) } )

@JsonTypeName("forth")

public class Master {


    public String name;

}

要求


{

    "name":"test",

    "type":"forth"

}


查看完整回答
反對 回復 2023-12-30
  • 1 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號