Spring Boot应用从application.yaml读取带前导零字符串值异常
问题原因与解决方案
问题根源
YAML语法中,带前导零的数字会被默认解析为八进制数。你配置里的044525266是八进制值,转成十进制正好是9611958——哪怕你注入的是String类型,snakeyaml也会先把它解析成数字再转成字符串,所以得到了错误结果。
解决办法
方法1:修改YAML配置,用引号包裹值
直接把bic的值用双引号或单引号括起来,强制让YAML解析器把它当作字符串处理:acquiring: bic: "044525266"方法2:在@Value中用SpEL强制转为字符串
如果无法修改配置文件,可以通过Spring表达式语言(SpEL)在注入时强制转换为字符串:@Autowired public AcquiringService( // 其他参数... @Value("#{'${acquiring.bic}'}") String bic, // 其他参数... )方法3:升级snakeyaml版本
snakeyaml从1.24版本开始,默认不再将带前导零的数字解析为八进制(仅当数字以0o开头时才会当作八进制)。你可以升级org.yaml:snakeyaml到1.24及以上版本,注意要配合Spring Boot 2.1.8的依赖兼容(可在pom.xml或build.gradle中手动指定版本)。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

