Kotlin Spring启动@ConfigurationProperties列表

ttt*_*ttt 6 spring kotlin spring-boot

我想用Kotlin读取yaml配置文件,下面是我的代码: application.yml

message:
  messages:
    - name: abc
      type: aaa
      size: 10
    - name: xyz
      type: bbb
      size: 20
Run Code Online (Sandbox Code Playgroud)

MessageConfig.kt

package com.example.demokotlin

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration
import java.math.BigDecimal

@ConfigurationProperties(prefix = "message")
@Configuration
class MessageConfig {
  lateinit var messages: List<Message>
}

class Message {
  lateinit var name: String
  lateinit var type: String
  lateinit var size: BigDecimal
}
Run Code Online (Sandbox Code Playgroud)

要使用配置的类:

package com.example.demokotlin

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component

@Component
class MessageService @Autowired constructor(private var messageConfig: MessageConfig) {

  fun createMessage(): String {
    println("in service........")
    println(messageConfig.messages[0].name)
    println(messageConfig.messages[0].type)
    println(messageConfig.messages[0].size)
    return "create a message......."
  }
}
Run Code Online (Sandbox Code Playgroud)

看起来如果yaml文件有数组/列表,Kotlin无法正确读取它,但它没有数组工作.

我有完全相同的代码,适用于Java.我的Kotlin代码出了什么问题?

sno*_*owe 15

您遇到了这个错误.简单地改变

lateinit var messages: List<Message>
Run Code Online (Sandbox Code Playgroud)

var messages: MutableList<Message> = mutableListOf()
Run Code Online (Sandbox Code Playgroud)

使你的代码工作.这是一个完整的工作示例.