SnakeYaml API 似乎有一个非常有趣的功能,可以在加载和转储期间保留注释 (
setProcessComments(true)
)。我已在调试器中确认它确实会摄取并跟踪注释,因为我可以在使用 Node
后在 compose(fileStream)
表示树上找到它们。但是,我还没有找到有关此功能的任何类型的文档或它如何有用,特别是在输出方面。但这似乎确实是可能的,因为 DumperOptions.setProcessComments(true)
可用。
我找到的所有文档都集中在
Map
和/或 JavaBean 加载和转储上,这两者似乎都无法从存储在 Node
树上的注释中受益。或者,如果是的话,我不清楚如何。
谁能提供一个相对简单的“往返”示例,其中 YAML 文件加载注释,然后转储注释?
明白了。很简单,这种模式似乎对我有用:
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.representer.Representer;
// ...
LoaderOptions loadOptions = new LoaderOptions();
loadOptions.setProcessComments(true);
DumperOptions dumpOptions = new DumperOptions();
dumpOptions.setProcessComments(true);
Yaml yaml = new Yaml(new SafeConstructor(loadOptions), new Representer(dumpOptions), dumpOptions, loadOptions);
Node rootNode = yaml.compose(myInputStream);
// ...
yaml.serialize(rootNode, outputWriter);
Yaml yaml = new Yaml(new Constructor(SaintsDto.class));
try (InputStream inputStream = RoughMain.class.getClassLoader().getResourceAsStream("static/saints.yml")) {
Iterable<Object> itr = yaml.loadAll(inputStream);
for(Object obj: itr){
SaintsDto saintsDto = (SaintsDto) obj;
saintsDtoList.add(saintsDto);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
错误:不兼容的类型:类无法转换为LoaderOptions Yaml yaml = new Yaml(new Constructor(SaintsDto.class)); ^