如何在 Kotlin 中使用@ConfigurationProperties
How to use @ConfigurationProperties with Kotlin
我有这个自定义对象:
data class Pair(
var first: String = "1",
var second: String = "2"
)
现在我想用我的 application.yml
:
自动装配它
my-properties:
my-integer-list:
- 1
- 2
- 3
my-map:
- "abc": "123"
- "test": "test"
pair:
first: "abc"
second: "123"
使用这个 class:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
lateinit var myIntegerList: List<Int>
lateinit var myMap: Map<String, String>
lateinit var pair: Pair
}
在添加Pair
之前它工作正常,但在我只得到Reason: lateinit property pair has not been initialized
之后
这是我的 main
:
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
@RestController
class MyRestController(
val props: ComplexProperties
) {
@GetMapping
fun getProperties(): String {
println("myIntegerList: ${props.myIntegerList}")
println("myMap: ${props.myMap}")
println("pair: ${props.pair}")
return "hello world"
}
}
使用 java 我已经完成了这个,但我看不出这里缺少什么。
你不能用 lateinit var 来做到这一点。
解决方案是将您的对 属性 初始化为空:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
...
var pair: Pair? = null
}
或者用默认值实例化你的配对:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
...
var pair = Pair()
}
您现在可以使用您的 application.yml:
自动装配它
...
pair:
first: "abc"
second: "123"
我有这个自定义对象:
data class Pair(
var first: String = "1",
var second: String = "2"
)
现在我想用我的 application.yml
:
my-properties:
my-integer-list:
- 1
- 2
- 3
my-map:
- "abc": "123"
- "test": "test"
pair:
first: "abc"
second: "123"
使用这个 class:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
lateinit var myIntegerList: List<Int>
lateinit var myMap: Map<String, String>
lateinit var pair: Pair
}
在添加Pair
之前它工作正常,但在我只得到Reason: lateinit property pair has not been initialized
这是我的 main
:
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
@RestController
class MyRestController(
val props: ComplexProperties
) {
@GetMapping
fun getProperties(): String {
println("myIntegerList: ${props.myIntegerList}")
println("myMap: ${props.myMap}")
println("pair: ${props.pair}")
return "hello world"
}
}
使用 java 我已经完成了这个,但我看不出这里缺少什么。
你不能用 lateinit var 来做到这一点。
解决方案是将您的对 属性 初始化为空:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
...
var pair: Pair? = null
}
或者用默认值实例化你的配对:
@Configuration
@ConfigurationProperties(prefix = "my-properties")
class ComplexProperties {
...
var pair = Pair()
}
您现在可以使用您的 application.yml:
自动装配它...
pair:
first: "abc"
second: "123"