首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jackson:数组中缺少@JsonTypeInfo

Jackson:数组中缺少@JsonTypeInfo
EN

Stack Overflow用户
提问于 2013-01-29 19:57:10
回答 1查看 2.2K关注 0票数 6

我发现Jackson JSON处理器库有一些奇怪的行为,我很好奇这是故意的还是一个bug。请看下面的代码:

代码语言:javascript
运行
复制
@JsonTypeInfo(use = Id.NAME)
public class Nut {}

代码语言:javascript
运行
复制
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));

输出:

代码语言:javascript
运行
复制
{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{}]

我期望的(和想要的)如下:

代码语言:javascript
运行
复制
{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{"@type":"Nut"}] // <<< type information included

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 02:20:07

这是预期的行为。在遍历对象图进行序列化时,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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14582343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档