3

ジャワ:

    @JsonTypeInfo(  
            use = JsonTypeInfo.Id.MINIMAL_CLASS,  
            include = JsonTypeInfo.As.PROPERTY,  
            property = "@type")
    public class Pet{ 
        String name;
    }

    public class Dog extends Pet{}
    public class Cat extends Pet{}

    public class PetHouse {
        List<Pet> pets;
    }

    public class BarkingData {
        int decibels;
        Dog dog;
    }

JSON シリアライゼーション

    petHouse = {
        pets :
        [
            {'@type': 'Dog', 'name':'Droopy'},
            {'@type': 'Cat', 'name':'Scratchy'},
            {'@type': 'Dog', 'name':'Snoopy'}
        ]
    }

    barkingData = {
        decibels:15,
        dog:{'@type':'Dog', 'name':'Droopy'}
    }

Question クラス BarkingData には、Dog 型のフィールドがあります (猫は吠えません)。宣言フィールドからそのタイプを「ヒント」できるインスタンスの typeInfo を含めないように Jackson に指示することはできますか?

Barking データの出力は次のようになります。

    barkingData = {
        decibels:15,
        dog:{'name':'Droopy'}
    }
4

1 に答える 1

1

このフィールドの動的型 (実際の型) を知っているというあなたの考えは、静的型はのサブクラスがDogないAnimal場合にのみ機能するわけではないためですDogDogclassを作成するfinalと、Jackson は型情報を安全に省略できることを認識します。

さらに、クラスの定義に注釈をDog,追加することにより、静的型のフィールドに対して、Jackson の型情報設定をより複雑な方法でオーバーライドできます。@JsonTypeInfoDog

于 2013-09-18T16:59:31.880 に答える