Jackson を使用して JSON をポリモーフィック型に逆シリアル化し、コンパイル エラーを回避する方法

Mary-Kate Olsen
リリース: 2024-11-17 04:39:03
オリジナル
311 人が閲覧しました

How to Deserialize JSON with Jackson into Polymorphic Types and Avoid Compile Errors?

Jackson を使用して多態性型に JSON を逆シリアル化する: コンパイル エラーを解決する

Jackson を使用して多態性 JSON 逆シリアル化を実装しようとすると、コンパイル エラーが発生する可能性があります。 -time エラー「タイプ ObjectMapper の readValue(JsonParser, Class) は、引数 (ObjectNode, Class) には適用できません。」mapper.readValue(root, animeClass) を呼び出すとき。このエラーは、指定された引数と予期される型シグネチャの間の非互換性によって発生します。

この問題を解決するには、Jackson のアノテーションベースのアプローチをポリモーフィック逆シリアル化に利用することを検討してください。これには、抽象 Animal クラスとそのサブクラス (Dog および Cat) に @JsonTypeInfo、@JsonSubTypes、および @JsonIgnoreProperties アノテーションを追加することが含まれます。以下に例を示します。

@JsonIgnoreProperties(ignoreUnknown = true)
@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 {

    protected String name;

    // Getters and setters for the name property
}
ログイン後にコピー

サブクラスでは、必要に応じて追加のプロパティを指定できます。たとえば、Dog には品種プロパティがあり、Cat には favouriteToy プロパティがある可能性があります。

JSON を Animal オブジェクトに逆シリアル化するとき、Jackson は @type プロパティを使用して、インスタンス化する特定のサブクラスを決定します。テスト ケースの例は次のとおりです。

ObjectMapper objectMapper = new ObjectMapper();

Animal myDog = new Dog("ruffus", "english shepherd");

Animal myCat = new Cat("goya", "mice");

String dogJson = objectMapper.writeValueAsString(myDog);
Animal deserializedDog = objectMapper.readValue(dogJson, Animal.class);

String catJson = objectMapper.writeValueAsString(myCat);
Animal deseriliazedCat = objectMapper.readValue(catJson, Animal.class);
ログイン後にコピー

このアプローチにより、多態性 JSON を対応するサブクラスにシームレスに逆シリアル化でき、前述のコンパイル時エラーが回避されます。

以上がJackson を使用して JSON をポリモーフィック型に逆シリアル化し、コンパイル エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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