使用JsonTypeInfo.As.WRAPPER_OBJECT

时间:2019-05-02 11:08:28

标签: java json jackson

将杰克逊与多态行为一起使用时,我遇到了一个奇怪的行为。 让我用一个简单的例子来解释,我有以下类:

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”}     } } 这里的一切都如我所料。当dogcat属于Animal List的一部分时,它们以我指定的名称包装在对象中。

在属性为gaurdDog的情况下,我想排除换行并直接将所有参数如下所示

...
    "gaurdDog": {
         "name": "rambo"
    }
...

我该如何实现?

基本上,我想在Dog列表中包含Animal时产生包装器。

使用:Jackson 2.3.0

1 个答案:

答案 0 :(得分:1)

Id.NONE应该在这里工作。您需要注释给定的属性,如下所示:

@JsonTypeInfo(use = Id.NONE)
private Dog gaurdDog;