在杰克逊我想包括每个自定义对象的类型信息。为了在没有注释的情况下完成此操作,我正在使用
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
}
}
对我来说一切都很好,除了我java.util.ArrayList
在 JSON 字符串中突出显示的内容。我不想要这样的容器类型信息。
上面的 API 级别本身是否有任何简单的支持来实现这一点而无需覆盖TypeResolverBuilder
或任何自定义?