Spring Boot @Value 绑定 Set 失败?
Spring Boot Value 绑定 Set 失败一、问题背景在同事项目开发过程中遇到了一个看起来很简单但实际很容易踩坑的问题同事希望在application.properties中配置一个字符串集合然后在代码中直接注入为SetString。配置如下someKeySS,DD,AA代码如下Value(${someKey}) private SetString someValues;一开始同事以为这会正常工作但实际运行后结果却不符合预期。二、问题表现打印someValues后发现数据中包含了多余的引号[\SS, DD, AA\]显然这不是我们想要的结果。三、问题分析properties 配置格式问题当前配置存在两个隐藏问题:keySS,DD,AA问题一双引号 被当作内容在application.properties中引号不是语法符号而是字符串的一部分也就是说Spring 实际读取的是SS,DD,AA而不是SS,DD,AA问题二Value 自动类型转换的不确定性Value(${key}) private SetString someValues;Spring 在这里做了两件事先按逗号,拆分字符串再尝试转换为SetString但问题是这种转换是隐式的对格式要求比较严格一旦字符串不干净比如有引号、空格、尾逗号就容易出问题四、解决方案方案一修正配置去掉双引号把配置改成keySS,DD,AA方案二显式 split推荐Value(#{${someKey}.split(,)}) private SetString someValues;优点明确指定解析逻辑避免 Spring 自动转换的不确定性更可控、更稳定五、结语配置格式不规范 隐式类型转换 隐蔽Bug这个问题虽然很小但在实际开发中还是很常见的。建议尽量遵循配置保持“干净”避免隐式转换优先使用强类型绑定
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2517841.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!