Jackson Yaml Type Info在序列化时出错

时间:2016-10-26 21:09:42

标签: java jackson yaml

通过Jackson将对象序列化为yml时,我得到以下输出:

---
commands:
  dev: !<foo.bar.baz.DevCommand>

然而,我想要的是:

---
commands:
  dev: 
    type: foo.bar.baz.DevCommand

我能够将这种罚款反序列化。也就是说,反序列化部分按预期工作。我在任何想到的地方都添加了以下注释:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type")

在DevCommand接口上,在DevCommand上具体类,在具有commands映射的类型(字段和getter / setter)上。

我需要做些什么来强制Jackson使用我想要的类型格式?

1 个答案:

答案 0 :(得分:5)

Yaml已经内置了类型信息,因此Jackson默认使用它。从this issue开始,修复是禁用本机类型ID。

  

YAML具有本机类型ID和对象ID,因此默认使用它们   (假设这是用户喜欢的)。但你可以用以下方法禁用它:

YAMLGenerator.Feature.USE_NATIVE_TYPE_ID
     

并特别禁用该;类似的东西:

YAMLFactory f = new YAMLFactory();
f.disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);
ObjectMapper m = new ObjectMapper(f);
     

或,为方便起见

YAMLMapper m = new YAMLMapper()
 disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);