You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Jackson的YAMLMapper支持解析YAML规范中的.NAN值?

配置方法

你可以通过开启Jackson内置的YAML解析特性和全局类型强制转换规则实现需求,不需要自定义反序列化器:

  1. 首先开启YAML专属的ALLOW_NAN解析特性,该特性默认关闭,开启后即可兼容YAML规范定义的.NAN、.INF、-.INF等非数值表示,不会再抛出Malformed numeric value '.NAN'错误。
  2. 再开启非数值转null的强制转换配置,即可将解析到的.NAN自动转为null值。

代码示例(Jackson 2.14及以上版本)

import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLParser;
import com.fasterxml.jackson.databind.DeserializationFeature;

// 构建YAMLMapper实例
YAMLMapper yamlMapper = YAMLMapper.builder()
    // 开启YAML规范非数值解析支持
    .enable(YAMLParser.Feature.ALLOW_NAN)
    // 开启非数值强制转null配置
    .enable(DeserializationFeature.COERCE_NAN_TO_NULL)
    .build();

兼容低版本Jackson的配置

如果使用的Jackson版本低于2.14,没有内置的COERCE_NAN_TO_NULL特性,可以通过全局 coercion 规则配置实现相同效果:

import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;

YAMLMapper yamlMapper = YAMLMapper.builder()
    .enable(YAMLParser.Feature.ALLOW_NAN)
    .build();

// 全局配置浮点数类输入(含.NAN)强制转null
yamlMapper.coercionConfigDefaults()
    .setCoercion(CoercionInputShape.FLOAT, CoercionAction.AsNull);

配置完成后,你就可以使用符合YAML规范的.NAN写法,既不会触发VS Code等编辑器的Schema校验错误,Jackson也能正常将该值反序列化为null。


内容的提问来源于stack exchange,提问作者J. Dimeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:07