nut*_*ike 6 java serialization json jackson
我发现了杰克逊JSON处理器库的一些奇怪的行为,我很好奇这是故意还是错误.请看下面的代码:
@JsonTypeInfo(use = Id.NAME)
public class Nut {}
Run Code Online (Sandbox Code Playgroud)
...
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));
Run Code Online (Sandbox Code Playgroud)
输出:
{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{}]
Run Code Online (Sandbox Code Playgroud)
我期望(和想要)的是以下内容:
{"@type":"Nut"}
{"@type":"Nut"}
[{"@type":"Nut"}]
[{"@type":"Nut"}] // <<< type information included
Run Code Online (Sandbox Code Playgroud)
我是否会遗漏某些内容或者我应该提交错误报告?
这是预期的行为。当遍历对象图进行序列化时,Jackson在确定要包含哪些类型信息时使用对象的声明类型。中的元素objects
已声明类型为 Object,但您尚未告诉 Jackson 为其包含任何类型信息。
Jackson 只查看 的顶级参数的运行时类型writeValueAsString
,因为方法参数的类型为Object
;在Java中不可能知道作为参数传递给方法的对象的声明类型(即使使用泛型,由于类型擦除),所以你的前两个例子(writeValueAsString(nut)
和writeValueAsString(object)
实际上是相同的)。
归档时间: |
|
查看次数: |
1907 次 |
最近记录: |