在我的application.yml
文件中声明:
service:
a:
b: 011600
c: 011200
通过
.yml
注释从@Value
中选择值:@Value("${service.a.c}")
private String VALUE;
而不是预期的“011200”,我得到的是“4992”,。yml中未提及。
最佳答案
您没有指定您的文档具有哪个版本的YAML,看起来您的解析器默认为1.1版(或1.1版兼容性)。这会导致以0开头的值以及后面的数字被解释为八进制,011200
(八进制)的值是4736
(十进制),011600
(八进制)的值是4992
。
在YAML 1.2中,八进制整数值应以Oo
开头,因此011200
将为整数11200
尝试使用:
%YAML 1.2
---
service:
a:
b: 011600
c: 011200
并且如果没有获得所需的值(value),则应考虑使用兼容的YAML解析器(YAML 1.2规范来自2009年,因此有足够的时间来解决问题)。
您当然可以引用整数标量,但是它们将作为字符串而不是整数加载。在这种情况下,您无需指定版本标记,版本1.2和1.1的解释方式相同:
service:
a:
b: '011600'
c: '011200'
如果在获取文件中指定的十进制值后,仍然为
@Value("${service.a.c}")
设置了错误的值,则应该考虑使用其他访问方法(如果键中有点(例如serv.ice:
),则该方法可以使用,或者再次使用,一个不同的解析器。