ホームページ > Java > &#&チュートリアル > Jackson の ObjectMapper を使用してコンパイル エラーなしでポリモーフィック JSON を逆シリアル化する方法は?

Jackson の ObjectMapper を使用してコンパイル エラーなしでポリモーフィック JSON を逆シリアル化する方法は?

Mary-Kate Olsen
リリース: 2024-11-24 16:36:11
オリジナル
809 人が閲覧しました

How to Deserialize Polymorphic JSON Using Jackson's ObjectMapper without Compilation Errors?

Jackson と多態性 JSON: ObjectNode 逆シリアル化のコンパイル エラーに対処する

この調査は、Jackson のメソッドを使用して多態性 JSON を逆シリアル化するときに発生するコンパイル エラーを解決することを目的としています。オブジェクトマッパー。具体的には、エラーは次の行にあります:

return mapper.readValue(root, animalClass);
ログイン後にコピー

問題の説明:

このエラーは、readValue() のメソッド シグネチャと引数の間の不一致に起因します。提供された。 readValue() は 2 つの引数、JsonParser と Class を期待しますが、このコードでは、ObjectNode (JsonParser ではない) と Animal のサブタイプ (Animal 自体ではありません) が渡されます。

Annotation-ベースの多態性ソリューション:

チュートリアルで説明したレジストリベースのアプローチの代替として、多態性逆シリアル化に Jackson のアノテーションベースのアプローチを使用することを検討してください。これには以下が含まれます:

  1. Animal クラスのアノテーション: @JsonTypeInfo を使用して型情報を JSON に格納する方法を定義し、@JsonSubTypes を使用して可能なサブタイプを指定します。
  2. サブクラス (例: Dog と Cat) に注釈を付ける: @JsonTypeId を使用して、型情報を保持するプロパティの名前を定義します。

実装例:

// 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート