@Value 与来自 YAML 的 Kotlin 中的列表
Posted
技术标签:
【中文标题】@Value 与来自 YAML 的 Kotlin 中的列表【英文标题】:@Value with List in Kotlin from YAML 【发布时间】:2019-08-06 06:25:28 【问题描述】:我正在尝试使用 Kotlin 初始化 Spring Boot 项目中 YAML 文件中的属性列表。
它适用于普通字符串,但当我尝试初始化列表时失败,出现以下错误:
Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'foo.bars' in value "$foo.bars"
Kotlin 代码具有以下构造函数参数
@Value("\$foo.bars")
val foobars: List<String>
yaml 文件具有以下值:
foo:
bars:
- test1
- test2
我需要在列表和普通字符串之间做一些不同的事情吗?
【问题讨论】:
你试过用数组代替列表吗? 现在试了一下,得到了同样的错误:“java.lang.IllegalArgumentException: Could not resolve placeholder 'foo.bars' in value "$foo.bars"” 你定义了属性值了吗?在我看来,问题在于 Spring 找不到该属性。 看起来我使用的语法错误或不受支持,我使用了您在帖子中看到的内容,但似乎可以使用逗号分隔的列表。 在 Kotlin 中也有解决方法:***.com/a/26700938/4395348 【参考方案1】:here 描述的解决方案可以针对 Kotlin 进行一些更改:
@Component
@ConfigurationProperties("foo")
class FooBarsProperties
lateinit var bars: List<String>
只需在需要的地方注入 FooBarsProperties。不要忘记将 @EnableConfigurationProperties 添加到您的某些配置类中。
【讨论】:
以上是关于@Value 与来自 YAML 的 Kotlin 中的列表的主要内容,如果未能解决你的问题,请参考以下文章
springboot项目中PropertySource读取yaml配置文件
Spring - 通过@Value 读取具有多行属性值的 YAML