使用yaml factory创建objectMapper时,您可以设置几个配置参数:
ObjectMapper o = new ObjectMapper(new YAMLFactory());
// o.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
// o.enable(SerializationFeature.CLOSE_CLOSEABLE);
Run Code Online (Sandbox Code Playgroud)
问题是在YAML Generator中忽略了这个配置:
@Override
public void close() throws IOException
{
if (!isClosed()) {
_emitter.emit(new DocumentEndEvent(null, null, false));
_emitter.emit(new StreamEndEvent(null, null));
super.close();
_writer.close();
}
}
Run Code Online (Sandbox Code Playgroud)
即使在javadoc中写入了别的东西
void com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.close()抛出IOException
调用关闭此生成器的方法,以便不再写入内容.
底层目标(流,编写器)是否关闭取决于此生成器是否管理目标(即,是唯一一个可以访问目标的目标 - 如果调用者传递对资源的引用(例如File,但不是流) ; 或者启用了Feature.AUTO_CLOSE_TARGET功能.如果上述任何一个为真,则目标也将关闭.否则(未管理,功能未启用),目标未关闭.
使用 YAML 映射器而不是对象映射器。这对我来说效果很好。
YAMLMapper yamlMapper = new YAMLMapper();
yamlMapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
yamlMapper.configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, true);
yamlMapper.enable(SerializationFeature.CLOSE_CLOSEABLE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |