通过 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 使用我想要的类型格式?
Yaml 已经内置了类型信息,因此 Jackson 默认使用它。从这个问题 https://github.com/FasterXML/jackson-dataformat-yaml/issues/79,修复方法是禁用使用本机类型 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)