通过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使用我想要的类型格式?
答案 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);