[英]Excluding properties from the JSON (during Jackson serialization) in the Spring MVC
[英]Jackson excluding type information for containeirs (List, Map, Collection) during serialization
在Jackson中,我想為每個自定義對象添加類型信息。 為了做到這一點而沒有注釋,我正在使用
OBJECT_MAPPER.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "@Ketan");
它正在工作,但它還包括List
, Map
, Collection
類型信息,例如容器本身。
讓我給您一個Animal
, Dog
, Cat
和Zoo
層次結構的標准示例。
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;
}
}
在這里,我有兩個自定義對象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
}
}
除了突出顯示的內容外,一切對我都很好– 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.