将杰克逊与多态行为一起使用时,我遇到了一个奇怪的行为。 让我用一个简单的例子来解释,我有以下类:
Animal.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;
}
Dog.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:
{
“ allAnimals”:[{
“ cat”:{“ name”:“ zazzy”}
},{
“ cat”:{“ name”:“ pus”}
},{
“ dog”:{“ name”:“ marley”}
}
],
“ gaurdDog”:{
“ dog”:{“ name”:“ rambo”}
}
}
这里的一切都如我所料。当dog
和cat
属于Animal
List
的一部分时,它们以我指定的名称包装在对象中。
在属性为gaurdDog
的情况下,我想排除换行并直接将所有参数如下所示
...
"gaurdDog": {
"name": "rambo"
}
...
我该如何实现?
基本上,我想在Dog
列表中包含Animal
时产生包装器。
使用:Jackson 2.3.0
答案 0 :(得分:1)
Id.NONE
应该在这里工作。您需要注释给定的属性,如下所示:
@JsonTypeInfo(use = Id.NONE)
private Dog gaurdDog;