https://github.com/spring-projects/spring-framework/blob/b30f9a13083aa1a95c92dd4d7916eeb7474c9a1c/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlProcessor.java#L286
For example:
valueMap: {1: enabled, 0: disabled}
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at java.util.LinkedHashMap.forEach(Unknown Source)
at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:271)
at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:287)
at java.util.LinkedHashMap.forEach(Unknown Source)
at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:271)
at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:287)
at java.util.Collections$SingletonMap.forEach(Unknown Source)
at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:271)
at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:299)
at java.util.LinkedHashMap.forEach(Unknown Source)
at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:271)
at org.springframework.beans.factory.config.YamlProcessor.lambda$buildFlattenedMap$1(YamlProcessor.java:287)
at java.util.LinkedHashMap.forEach(Unknown Source)
at org.springframework.beans.factory.config.YamlProcessor.buildFlattenedMap(YamlProcessor.java:271)
at org.springframework.beans.factory.config.YamlProcessor.getFlattenedMap(YamlProcessor.java:266)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:218)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:161)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:134)
at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:75)
at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadDocuments(ConfigFileApplicationListener.java:562)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:518)
... 42 common frames omitted
Comment From: sbrannen
Please note that Spring's support for YAML is chiefly targeted at use cases that look up values for properties where a property name is always a String. This allows for interoperability with Java Properties and property placeholder support via @Value("${property.name}"), etc.
From the stack trace you have provided, I see that you are using Spring Boot. In that case, I would assume the property names also need to be strings instead of numbers.
Have you considered rewriting your configuration as follows?
valueMap: {'1': enabled, '0': disabled}
Comment From: sbrannen
In light of the fact that Spring only supports String-based property names, I am closing this issue as "works as designed".
If you need general-purpose support for YAML, including numeric keys, please use a dedicated YAML library for that.