当前位置: 首页 > news >正文

Spring Boot YML配置值“011“在代码中变为9的问题解析

Spring Boot YML配置值"011"在代码中变为9的问题解析

问题原因

当您在YML配置文件中设置011这样的值时,Spring Boot会将其解析为八进制数字,导致最终获取的值为十进制的9。这是因为:

  1. YAML规范中,以0开头的数字字面量会被解析为八进制数
  2. 八进制的011等于十进制的9(0×8² + 1×8¹ + 1×8⁰ = 9)
  3. Spring Boot在绑定属性时会自动进行这种数值转换

解决方案

方案1:使用引号强制作为字符串处理(推荐)

your-property: "011"  # 加双引号

方案2:使用单引号包裹

your-property: '011'  # 单引号也可以

方案3:在Java代码中指定类型

@Value("#{'${your-property}'}")  // 使用SpEL确保字符串类型
private String yourProperty;

方案4:使用配置类绑定

@ConfigurationProperties(prefix = "your")
public class YourConfig {private String property; // 会保持原始字符串值// getter/setter
}

方案5:避免前导零(如果业务允许)

your-property: 11  # 去掉前导零

为什么这些方案有效

  1. 引号方案:YAML将加引号的内容识别为字符串而非数字
  2. SpEL方案#{}表达式会阻止自动类型转换
  3. 配置类方案@ConfigurationProperties对类型转换更宽松
  4. 去掉前导零:避免被识别为八进制数

完整示例

application.yml:

demo:code: "011"  # 使用引号

Java代码:

@Value("${demo.code}")
private String code; // 现在会得到"011"而不是9

补充说明

  1. 这个问题只影响数字形式的值,字母数字混合的值(如cert-id)不受影响
  2. 该行为是YAML 1.1规范定义的,现代YAML 1.2已修改此行为,但Spring Boot仍保持向后兼容
  3. 在Spring Boot 2.4+版本中,这种行为仍然存在

建议采用加引号的方案,这是最清晰且符合YAML最佳实践的做法。

http://www.xdnf.cn/news/118621.html

相关文章:

  • 济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理
  • 二分小专题
  • 1Panel+Halo快速部署:简化服务器管理与网站搭建流程探索
  • MySQL 报错解析:SQLSyntaxErrorException caused by extra comma before FROM
  • 美团获全国首张低空物流全境覆盖运营合格证,其第四代无人机具备全域环境适应能力
  • redis经典问题
  • Redis 基础和高级用法入门
  • 【每天一个知识点】熵(Entropy)
  • Redis 核心应用场景
  • Linux 网络基础三 (数据链路层协议:以太网协议、ARP 协议)
  • Linux系统的延迟任务及定时任务
  • 济南国网数字化培训班学习笔记-第二组-6-输电线路现场教学
  • 一个开源且具有直观视觉界面的 API,可实现 DeepSeek 与 SillyTavern 的非官方集成。
  • 关于QT信号、槽、槽函数的讲解
  • Flutter Dart 循环语句 for while do..while break、continue
  • 第二章、安全认证
  • JavaWeb:Web介绍
  • 【Java实战经验】泛型-类型灵活使用与限制
  • 在线地图工具geojson.io
  • 【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析
  • 第53讲 农学科研中的AI伦理与可解释性——探索SHAP值、LIME等可解释工具与科研可信性建设之道
  • 【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(3)
  • Linux的时间函数
  • 【k8s】k8s是怎么实现自动扩缩的
  • 移动通信行业术语
  • centos7使用yum快速安装最新版本Jenkins-2.462.3
  • 第六章 QT基础:6、QT的Qt 时钟编程
  • C语言编程--15.四数之和
  • Sharding-JDBC 系列专题 - 第十篇:ShardingSphere 生态与未来趋势
  • NLP高频面试题(五十三)——深度学习正则化详解