Spring Can';不要读yaml';使用@ConfigurationProperties创建复杂对象。整数不能转换为字符串
我正在读这个yml文件Spring Can';不要读yaml';使用@ConfigurationProperties创建复杂对象。整数不能转换为字符串,spring,spring-boot,annotations,yaml,lombok,Spring,Spring Boot,Annotations,Yaml,Lombok,我正在读这个yml文件 dist-price: 1234: foo: 4567 bar: false 并把它放在这门课上。(我正在使用Lombok和Spring Boot v1.5.4.RELEASE) 如果我将TreeMap更改为TreeMap,它可以正常工作。但是我真的需要使用整数。似乎TreeMap的键(在本例中:1234)正在转换为String。我不知道为什么 当TreeMap是TreeMap时,情况很好,yml就是这样 dist-price: 1234: 45
dist-price:
1234:
foo: 4567
bar: false
并把它放在这门课上。(我正在使用Lombok和Spring Boot v1.5.4.RELEASE)
如果我将TreeMap
更改为TreeMap
,它可以正常工作。但是我真的需要使用整数。似乎TreeMap
的键(在本例中:1234
)正在转换为String
。我不知道为什么
当TreeMap
是TreeMap
时,情况很好,yml就是这样
dist-price:
1234: 4567
编辑:我尝试了Spring Bootv1.5.9。发行版
,但运气不佳。这与@ConfigurationProperties
无关,而是与YAML处理键的方式有关。默认情况下,YAML中的键是String
,因此如果您真的想在那里使用integer,您必须以某种方式强制使用它
有几种记录在案的方法可以做到这一点,引用本应有效,但对我无效(“1234”给了我234!)。使用强制整数!!int
有效
dist-price:
!!int 1234:
foo: 4567
bar: false
这与@ConfigurationProperties
无关,而是与YAML处理键的方式有关。默认情况下,YAML中的键是String
,因此如果您真的想在那里使用integer,您必须以某种方式强制使用它
有几种记录在案的方法可以做到这一点,引用本应有效,但对我无效(“1234”给了我234!)。使用强制整数!!int
有效
dist-price:
!!int 1234:
foo: 4567
bar: false
我根据以下问题创建了一个示例项目:
并确认从此行引发异常:
如您所见,key
被键入为String
,这是异常的根本原因。我不确定这是否是合法用法,因为我从来没有考虑过它的Integer
键。我根据以下问题创建了一个示例项目:
并确认从此行引发异常:
如您所见,key
被键入为String
,这是异常的根本原因。我不确定这是不是合法的用法,因为我从来没有想过它的Integer
键。我认为这是一个bug。@Aristtl我也开始这么认为了。我现在正在使用一种变通方法。我使用的是Spring Boot v1.5.4。版本。@Stephane使用数字作为密钥是禁止的吗?另请看Johnny Lim的回答。我认为这是一个错误。@Aristtl我也开始这么认为了。我现在正在使用一种变通方法。我使用的是Spring Boot v1.5.4。版本。@Stephane使用数字作为密钥是禁止的吗?另请参见Johnny Lim的答案。如果我错了,请纠正我,但是,映射节点的内容是一组无序的键:值节点对,每个键都是唯一的。YAML对节点没有进一步的限制。
因此整数作为键是合法的。我想这是一只虫子。感谢您的澄清。@user2652379“legit”是指配置属性,而不是YAML。我认为Stephane可以为您提供是否合法的答案。如果我错了,请纠正我,但是,映射节点的内容是一组无序的键:值节点对,每个键都是唯一的。YAML对节点没有进一步的限制。
因此整数作为键是合法的。我想这是一只虫子。感谢您的澄清。@user2652379“legit”是指配置属性,而不是YAML。我想Stephane可以给你答案,看看它是否合法。
dist-price:
!!int 1234:
foo: 4567
bar: false