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

7tofc5zh  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(231)

我正尝试使用@Value注解在我的spring-component类中注入一个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中是否有方法将Map初始化为空Map?我有一个条件,即该属性将始终存在,并且只有属性值可以更改。我使用的是spring Boot version -〉2.7.1,应用程序是使用Kotlin构建的。
如果属性设置为{},则会出现属性未初始化错误。如果值存在,则会正常工作。如果始终必须保留属性,并且只能更改值。如果值为{},是否有方法使用空Map初始化属性。我始终可以将属性读取为字符串,然后转换为Map。但我希望避免这种情况。
谢谢你!

jmo0nnb3

jmo0nnb31#

因此,代码的问题在于,无论何时传递:

some.map.property={}

您将收到:

kotlin.UninitializedPropertyAccessException: lateinit property map has not been initialized

因为{}被Map为null,但是您希望有Map<String, Boolean>,这就是出现问题的原因。
解决方法很简单,如果出现null,可以使用默认值:

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

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

相关问题