4

ジャクソンでは、すべてのカスタムオブジェクトのタイプ情報を含めたいと思います。注釈なしでこれを達成するために、私は使用しています

OBJECT_MAPPER.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "@Ketan");

動作していますが、コンテナ自体のようにList、のタイプ情報も含まれています。MapCollection

Animal、、および階層Dogの標準的な例を示します。CatZoo

class Zoo {

    List<Cat> cats;
    Dog dog;

    public Dog getDog() {
       return dog;
    }

    public void setDog(Dog dog) {
       this.dog = dog;
    }

    public List<Cat> getCats() {
       return cats;
    }

    public void setCats(List<Cat> cats) {
       this.cats = cats;
    }

}

ここでは、2つのカスタムオブジェクトとがCatありDogます。それらだけのタイプ情報を含めたいのですが、コンテナーList(私の場合)も含めています。

シリアル化によって取得したJSON文字列を以下に示します。

{
    "@Ketan": "com.csam.wsc.enabling.core.codec.json.test.Zoo1",
    "cats": [
        // This line contains the issue //
        "java.util.ArrayList",
        [
            {
                "@Ketan": "com.csam.wsc.enabling.core.codec.json.test.Cat",
                "name": "animalName",
                "likesCream": true,
                "lives": 10
            },
            {
                "@Ketan": "com.csam.wsc.enabling.core.codec.json.test.Cat",
                "name": "animalName",
                "likesCream": true,
                "lives": 10
            }
        ]
    ],
    "dog": {
        "@Ketan": "com.csam.wsc.enabling.core.codec.json.test.Dog",
        "name": "animalName",
        "barkVolume": 0.0
    }
}

java.util.ArrayListJSON文字列で強調表示したものを除いて、すべてが問題ありません。そのようなコンテナタイプの情報は必要ありません。

TypeResolverBuilderオーバーライドやカスタマイズなしでこれを達成するために、上記のAPIレベル自体で簡単なサポートはありますか?

4

2 に答える 2

1

いいえ、コレクションを最終型として宣言しない限り。

于 2012-09-14T21:45:21.247 に答える