java - Jackson 使用 JsonTypeInfo.As.WRAPPER_OBJECT 时排除特定类的包装

标签 java json jackson

在使用具有多态行为的 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”:{ “狗”:{“名字”:“兰博”} } } 这里一切都如我所料。 dogcat 被包装在我指定的名称的对象中,当它们是 Animal List 的一部分时。

对于属性gaurdDog,我想排除包装并直接将所有参数如下所示

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

我如何实现这一目标?

基本上,当 DogAnimal 列表的一部分时,我想在它周围生成包装器。

使用: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/

相关文章:

java - 如何仅显示 Maven Reactor 构建顺序?

php - 将 json 从 php 发送到 javascript

jquery - Html 表转 json 数组

java - Spring-data-jpa EclipseLink 编织实体的问题

Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同

java - 如何每小时调用一次函数?另外,我怎样才能循环这个?

java - 使用 Spring MVC 3.0 执行内联行编辑的最便捷方法

java - 在 webview 上设置 Imagebutton

ios - 如何将 AfNetworking 响应对象 (JSON) 映射到自定义类?

php - Json DateTime 对象到 GregorianCalendar