Jackson と多態性 JSON: ObjectNode 逆シリアル化のコンパイル エラーに対処する
この調査は、Jackson のメソッドを使用して多態性 JSON を逆シリアル化するときに発生するコンパイル エラーを解決することを目的としています。オブジェクトマッパー。具体的には、エラーは次の行にあります:
return mapper.readValue(root, animalClass);
問題の説明:
このエラーは、readValue() のメソッド シグネチャと引数の間の不一致に起因します。提供された。 readValue() は 2 つの引数、JsonParser と Class を期待しますが、このコードでは、ObjectNode (JsonParser ではない) と Animal のサブタイプ (Animal 自体ではありません) が渡されます。
Annotation-ベースの多態性ソリューション:
チュートリアルで説明したレジストリベースのアプローチの代替として、多態性逆シリアル化に 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 中国語 Web サイトの他の関連記事を参照してください。