在使用具有多态行为的 Jackson 时,我遇到了一个奇怪的行为。 让我用简单的例子来解释,我有以下类(class):
动物.java:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat") })
public class Animal {
private String name;
}
狗.java
public class Dog extends Animal {}
Cat.java
public class Cat extends Animal {}
Zoo.java
public class Zoo {
private List<Animal> allAnimals;
private Dog gaurdDog;
// Getters and Setters
}
通过简单初始化,生成以下 JSON:
{
“所有动物”:[{
“猫”:{“名字”:“扎兹”}
}, {
“猫”:{“名称”:“脓”}
}, {
“狗”:{“名字”:“马利”}
}
],
“gaurdDog”:{
“狗”:{“名字”:“兰博”}
}
}
这里一切都如我所料。 dog
和 cat
被包装在我指定的名称的对象中,当它们是 Animal
List
的一部分时。
对于属性gaurdDog
,我想排除包装并直接将所有参数如下所示
...
"gaurdDog": {
"name": "rambo"
}
...
我如何实现这一目标?
基本上,当 Dog
是 Animal
列表的一部分时,我想在它周围生成包装器。
使用:Jackson 2.3.0
最佳答案
Id.NONE
应该在这里工作。您需要按如下方式注释给定属性:
@JsonTypeInfo(use = Id.NONE)
private Dog gaurdDog;
关于java - Jackson 使用 JsonTypeInfo.As.WRAPPER_OBJECT 时排除特定类的包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55951121/