通过杰克逊将对象序列化为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使用我想要的类型格式?
Yaml已经内置了类型信息,因此Jackson默认使用该信息。从此问题开始,解决方法是禁用使用本机类型ID。
YAML具有本机类型ID和对象ID,因此默认情况下会使用它们(假设这是用户喜欢的)。但是您可以使用以下方法禁用它:
Run Code Online (Sandbox Code Playgroud)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);