Springboot底层-snakeyaml自定义转储格式
YAML文档自定义转储
在SnakeYAML中进行转储的主要目的是生成可以反序列化实例的YAML文档。在某些情况下,创建的YAML文档可能并不符合你的需求:
- 不可变的对象。不可变对象可能拥有
getter
方法,但不存在setter
方法。默认情况下,映射时会调用setter
方法或构造方法。若属性的顺序不一致,致使对象无法解析。因此对象属性的顺序尤为重要,必须按照指定顺序序列化属性。 - 注释。注释可以帮助我们更好的理解和编辑YAML文档。
- 跳过一些JavaBean属性(例如:空集合、null、计算属性等)。
- 定义JavaBean属性顺序。这个顺序可能非常有用:比如,我们通常会将id或name作为第一个属性。(默认情况下按照字母顺序排序。)
- 由于标准类型具有一个以上的值,因此可以将
Representer
配置为使用不同的值。
YAML文档就是一个普通的文本文档,因此你可以使用任意的模板处理器来处理它。
默认算法:
- 判断是否可以仅使用
DumperOptions
。 - 若不是则使用
yaml.dumpAs(obj,Tag.MAP)
来解析它。 - 选择您指定的模板引擎,然后继续解析。
- 自行编写一个对象类存储数据,然后通过YAML解析生成对象类实例进行测试。测试过程中会提示该对象类不符合规范的地方并提醒您修改。
- 您也可以考虑扩展SnakeYAML的
org.yaml.snakeyaml.representer.Representer
。 - 实现你自己的模板引擎,将实例序列化为YAML文档。
以下是使用模板的示例。
JavaBeans
这个规范说明:“JavaBeans体系结构的主要目的是提供一种平台无关的组件体系结构。”
避免使用全局标记可以提高不同平台和语言之间公用YAML文档的能力。简单点来说就是跨平台和跨语言的能力。
若您自定义的Java类符合JavaBean规范,则可无需其他额外的代码支持,就可实现对象的序列化与反序列化。
例如:
以上代码会输出如下文档:
注意: ‘part’属性存在全局标记。而‘wheel’则没有(因为wheel的运行时类与CarWithWheel类中定义的相同)。
转储时首选的方法是使用yaml.dumpAs(obj,Tag.MAP)
。
Springboot底层-snakeyaml自定义转储格式
https://blog.cikaros.top/doc/ef82d306.html