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

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

使用jackson反序列化json以更正子類類型

使用jackson反序列化json以更正子類類型

繁花如伊 2023-03-09 10:34:25
將字符串反序列化為對象 ..ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);System.out.println(json); // Output is belowStatus status = new ObjectMapper().readValue(json, Status.class);ProcessingStage s = (ProcessingStage) status.getStages().get(0);// orDataStage s = (DataStage) status.getStages().get(0);產生這些錯誤..java.lang.ClassCastException: Stage cannot be cast to ProcessingStagejava.lang.ClassCastException: Stage cannot be cast to DataStage我如何使用 Jackson 將 的子類反序列Stage化為正確的實例類型?我期待status.stages包含:[DataStage, DataStage, ProcessingStage],但看起來它包含:[Stage, Stage, Stage]。上面的輸出System.out.println(json);..{  "stages":  [    {      "name":"Pre",      "order":1,      "data":      [        {          "id":"0688709c-17be-472a-bf5e-7d7b11bd8ccf"        }      ],    },    {      "name":"Processing",      "order":2,      "data":      [        {          "id":"ac3ecbb5-2aa6-4faf-b443-391472065219"        }      ],    },    {      "name":"Post",      "order":3,      "status":"not-started"    }  ]}Status.javaimport java.util.List;import com.fasterxml.jackson.annotation.JsonProperty;public class Status {    @JsonProperty("stages")    private List<Stage> stages;    public Status() {}    public List<Stage> getStages() {        return stages;    }    public void setStages(List<Stage> stages) {        this.stages = stages;    }}Stage.javaimport com.fasterxml.jackson.annotation.JsonIgnoreProperties;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.annotation.JsonSubTypes;@JsonIgnoreProperties(ignoreUnknown = true)@JsonSubTypes({    @JsonSubTypes.Type(value = ProcessingStage.class, name = "ProcessingStage"),    @JsonSubTypes.Type(value = DataStage.class, name = "DataStage") })
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您可以嘗試先使用 instanceOf 評估對象的類


 if(status.getStages().get(0) instanceOf ProcessingStage) {

  ProcessingStage s = (ProcessingStage) status.getStages().get(0);

 }

或評估其他班級


DataStage


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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