Jackson を使用して多態性型に JSON を逆シリアル化する: コンパイル エラーを解決する
Jackson を使用して多態性 JSON 逆シリアル化を実装しようとすると、コンパイル エラーが発生する可能性があります。 -time エラー「タイプ ObjectMapper の readValue(JsonParser, Class) は、引数 (ObjectNode, Class
この問題を解決するには、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 サイトの他の関連記事を参照してください。