Jackson 和多態性JSON:解決ObjectNode 反序列化的編譯錯誤
此查詢旨在解決使用Jackson 反序列化多態性JSON 時遇到的編譯錯誤物件映射器。具體來說,錯誤在於以下行:
return mapper.readValue(root, animalClass);
問題解釋:
錯誤源自於readValue() 的方法簽章與參數之間的不符假如。 readValue() 需要兩個參數:一個 JsonParser 和一個 Class,但在這段程式碼中,傳遞的是一個 ObjectNode(不是 JsonParser)和 Animal 的子型別(不是 Animal 本身)。
註解-基於多態性的解決方案:
作為教程中提到的基於註冊表的方法的替代方案,請考慮使用Jackson 的基於註釋的多態反序列化方法。這涉及:
範例實作:
// An abstract base class for animals @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat") }) public abstract class Animal { ... } // Subclass for dogs public class Dog extends Animal { ... } // Subclass for cats public class Cat extends Animal { ... } // Test class public class Test { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); ... // Serialize and deserialize animals as shown in the provided solution } }
透過使用註釋,Jackson 可以推斷根據JSON 中提供的類型資訊來確定物件的類型,無需註冊表並解決編譯錯誤。
以上是如何使用 Jackson 的 ObjectMapper 反序列化多型態 JSON 而不會出現編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!