yamlMapper.readValue映射YAML时拼接属性名抛出InvalidFormatException原因求助
问题根因
核心是YAML语法结构错误,导致解析逻辑不符合预期:
- YAML语法要求子级配置必须绑定到对应的父键,且缩进层级匹配。你当前的YAML文件中,
defaultLangId行之后直接缩进写了列表项,没有声明列表对应的父键cities,YAML解析器会默认将后续缩进的所有内容整体作为defaultLangId的多行字符串值处理,最终得到的是包含60\n - code: AR\n label: ar的长字符串,无法转换为int类型,因此抛出InvalidFormatException。 - 你修改
defaultLangId取值后才触发报错属于偶发现象,本质是结构错误一直存在,此前可能因为空白符、换行符的巧合没有触发异常,属于隐藏的语法问题。
修复方案
将列表配置绑定到和Java类字段对应的cities键下,调整缩进层级即可,正确的YAML写法如下:
defaultLangId: 60 cities: - code: AR label: ar last-result-index: 120
额外注意事项:
- YAML对缩进非常敏感,同级键必须保持左对齐,子级元素要比父级多2个空格缩进,禁止使用Tab缩进
- YAML中的配置键名必须和Java配置类的字段名严格匹配,否则会出现属性无法正常映射的问题
内容的提问来源于stack exchange,提问作者Zouhair Dre
相关产品推荐
相关产品推荐

