gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:39:31 26 4
gpt4 key购买 nike

在使用具有多态行为的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com