来自application.yml的@Value返回错误的值

时间:2017-03-16 07:59:53

标签: java spring-boot yaml

在我的application.yml文件中声明:

service:
  a: 
    b: 011600
    c: 011200

.yml通过@Value注释选择值

@Value("${service.a.c}")
private String VALUE;

而不是预期' 011200'我得到了#4; 4992'在.yml中没有提及。

2 个答案:

答案 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)

只是尝试引用您的值,因此它们是字符串。