@字段的值注入在空Map的情况下不起作用



我正试图使用@Value注释在spring组件类中注入一个map属性。

我的课有点像

@Service
class SomeService {
@Value("#{${some.map.property}}")
lateinit var map: Map<String, Boolean>
}

如果我的application.properties为-

some.map.property={a:true}

注射效果良好。但如果值为空,即类似于

some.map.property={}

应用程序抛出错误lateinit property map has not been initialised。如果属性的值是{},spring中是否有方法将映射初始化为空映射。我有一个条件,即该属性将始终存在,并且只有属性的值可以更改。我使用的是弹簧启动版本->2.7.1,该应用程序是使用Kotlin构建的。

如果属性设置为{},则会出现属性未初始化错误。如果存在该值,则工作正常。鉴于我总是要保留财产,只能更改价值。如果值为{},是否有方法用空映射初始化属性。我总是可以将属性读取为字符串,并转换为Map。但我想避免这种情况。

谢谢!

因此,代码的问题在于,无论何时通过:

some.map.property={}

您将收到:

kotlin.UninitializedPropertyAccessException: lateinit property map has not been initialized

因为{}被映射到null,但您期望有Map<String, Boolean>,这就是您遇到问题的原因。

解决方案很简单,如果出现null,可以使用默认值:

@Value("#{${some.map.property}}")
val map: Map<String, Boolean> = emptyMap()

在这种情况下,对于属性中的{}值,它将映射到空映射。

相关内容