在Jackson 中,我想包含每个自定义对象的类型信息。为了在没有注释的情况下完成此操作,我正在使用
OBJECT_MAPPER.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "@Ketan");
Run Code Online (Sandbox Code Playgroud)
这是工作,但它也包括类型信息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;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我有两个自定义对象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
}
}
Run Code Online (Sandbox Code Playgroud)
除了我java.util.ArrayList在 JSON 字符串中突出显示的内容外,一切对我来说都很好。我不想要这样的容器类型信息。
API 级别本身是否有任何简单的支持可以在不覆盖TypeResolverBuilder或任何自定义的情况下实现这一点?
如果你扩展 class 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);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |