Jackson + YAML 表示非数字 (.NAN)

Jackson + YAML for Not A Number (.NAN)

根据 YAML 规范,Not-a-number 表示为 .NAN https://yaml.org/refcard.html

但是,当使用 jackson-dataformats-textYAMLMapper 反序列化时,我们得到:

Malformed numeric value '.NAN'

如何告诉 ObjectMapper 接受给定字符串作为 null 的表示而不深入研究自定义反序列化器?或者是否有我应该启用的 YAML-specific 功能?

如果你使用 NULL,它可以在 Jackson 端工作,但它不再有效的 YAML 和 schema-aware 像 VS Code 这样的编辑器知道它,这让最终用户感到困惑:

我已经通过绕过 YAMLMapper 并直接转到 SnakeYAML 的 Yaml 解决了这个问题。我这样做是为了解决 Jackson 不解析锚点的问题,但后来我意识到它也解决了 .NaN/null 问题 - .NaNs 现在被正确解析为 Double.NaN

static final Yaml YAML = new Yaml();
static final ObjectMapper MAPPER = new ObjectMapper();
...

// Use SnakeYAML directly to resolve anchors and handle .NaN
protected static <T> T load(Path p, Class<T> cls) throws IOException {
    val yaml = YAML.load(Files.newInputStream(p));
    return MAPPER.treeToValue(MAPPER.valueToTree(yaml), cls);
}