簡體   English   中英

傑克遜(Jackson)排除序列化過程中容器(列表,地圖,集合)的類型信息

[英]Jackson excluding type information for containeirs (List, Map, Collection) during serialization

Jackson中,我想為每個自定義對象添加類型信息。 為了做到這一點而沒有注釋,我正在使用

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

它正在工作,但它還包括ListMapCollection類型信息,例如容器本身。

讓我給您一個AnimalDogCatZoo層次結構的標准示例。

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;
    }

}

在這里,我有兩個自定義對象CatDog 我只是想包括類型信息只有這些,但包括容器- 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
    }
}

除了突出顯示的內容外,一切對我都很好– JSON字符串java.util.ArrayList 我不想要這樣的容器類型信息。

在不重寫TypeResolverBuilder或任何自定義的情況下,API級別之上本身是否有任何簡單的支持來實現此TypeResolverBuilder

如果擴展類ObjectMapper.DefaultTypeResolverBuilder ,則變得很容易:

OBJECT_MAPPER.setDefaultTyping(new ObjectMapper.DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL) {
    {
        init(JsonTypeInfo.Id.CLASS, null);
        inclusion(JsonTypeInfo.As.PROPERTY);
        typeProperty("@Ketan");
    }

    @Override
    public boolean useForType(JavaType t) {
        return !t.isContainerType() && super.useForType(t);
    }
});

不可以,除非您聲明集合為最終類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM