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