gpt4 book ai didi

java - jackson :数组中缺少@JsonTypeInfo

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:06 26 4
gpt4 key购买 nike

我发现 Jackson JSON Processor 库有一些奇怪的行为,我很好奇这是故意的还是错误。请看下面的代码:

@JsonTypeInfo(use = Id.NAME)
public class Nut {}

ObjectMapper mapper = new ObjectMapper();

Nut nut = new Nut();
Object object = new Nut();
Nut[] nuts = new Nut[] { new Nut() };
Object[] objects = new Object[] { new Nut() };

System.out.println(mapper.writeValueAsString(nut));
System.out.println(mapper.writeValueAsString(object));
System.out.println(mapper.writeValueAsString(nuts));
System.out.println(mapper.writeValueAsString(objects));

输出:

{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{}]

我期望(和想要)的是:

{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{"@type":"Nut"}] // <<< type information included

我是否遗漏了什么或者我应该提交错误报告?

最佳答案

这是预期的行为。在遍历对象图以进行序列化时,Jackson 在确定要包含的类型信息时使用对象的声明 类型。 objects 中的元素声明了 Object 类型,您还没有告诉 Jackson 包含任何类型信息。

Jackson 只查看writeValueAsString 的顶级参数的运行时类型,因为方法参数的类型为Object;在 Java 中不可能知道作为参数传递给方法的对象的声明类型(即使使用泛型,由于类型删除),所以你的前两个例子(writeValueAsString(nut)writeValueAsString(object) 实际上是相同的)。

更多信息在这里:http://jackson-users.ning.com/forum/topics/mapper-not-include-type-information-when-serializing-object-why

关于java - jackson :数组中缺少@JsonTypeInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582343/

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