Jackson Yaml类型信息在序列化上是错误的

mty*_*son 6 java yaml jackson

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

---
commands:
  dev: !<foo.bar.baz.DevCommand>
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是:

---
commands:
  dev: 
    type: foo.bar.baz.DevCommand
Run Code Online (Sandbox Code Playgroud)

我可以反序列化这一罚款。也就是说,反序列化部分按预期工作。我已经想到了以下注释:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type")
Run Code Online (Sandbox Code Playgroud)

包括在DevCommand接口上,在DevCommand上的具体类,在具有commands地图的类型(字段和getter / setter方法)上。

我该怎么做才能迫使Jackson使用我想要的类型格式?

Mic*_*uff 5

Yaml已经内置了类型信息,因此Jackson默认使用该信息。从此问题开始,解决方法是禁用使用本机类型ID。

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

YAMLGenerator.Feature.USE_NATIVE_TYPE_ID
Run Code Online (Sandbox Code Playgroud)

并具体禁用该功能;就像是:

YAMLFactory f = new YAMLFactory();
f.disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);
ObjectMapper m = new ObjectMapper(f);
Run Code Online (Sandbox Code Playgroud)

或者,为方便起见

YAMLMapper m = new YAMLMapper()
 disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);
Run Code Online (Sandbox Code Playgroud)