在我的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:),则该方法可以使用,或者再次使用,一个不同的解析器。

09-11 19:38