我正在 Kotlin 開發一個 Spring Boot 專案。我想<String,Int>從 application.yml 檔案讀取對串列到可變串列。串列的型別如下。
@Configuration
@EnableAutoConfiguration
@ConfigurationProperties(prefix = "user-parameters")
class UserParameters {
/**
* Owners of the knapsacks and their capacity.
*/
var knapsacks = mutableListOf<Pair<String, Int>>()
init {
...
}
}
在 application.yml 檔案中,我嘗試使用以下配置。
...
user-parameters:
knapsacks:
- "[James]": 102
- "[Mary]": 185
但是,這會失敗并出現以下錯誤。
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target [Bindable@3a7b2e2 type = java.util.List<kotlin.Pair<java.lang.String, java.lang.Integer>>, value = 'provided', annotations = array<Annotation>[[empty]]] failed:
Property: user-parameters.knapsacks[0][James]
Value: 102
Origin: class path resource [application.yml] - 28:17
Reason: The elements [user-parameters.knapsacks[0][James],user-parameters.knapsacks[1][Mary]] were left unbound.
Property: user-parameters.knapsacks[1][Mary]
Value: 185
Origin: class path resource [application.yml] - 29:16
Reason: The elements [user-parameters.knapsacks[0][James],user-parameters.knapsacks[1][Mary]] were left unbound.
Action:
Update your application's configuration
如果我將型別更改為,則代碼有效,但由于實作細節Map<String, Int>我需要。Pair<String, Int>
我也嘗試了以下注釋,但無濟于事。
...
user-parameters:
knapsacks:
- "[James]": 102
"[Mary]": 185
...
user-parameters:
knapsacks:
"[James]": 102
"[Mary]": 185
...
user-parameters:
knapsacks:
- { "[James]": 102 }
- { "[Mary]": 185 }
如何String,Int從 application.yml 讀取對可變串列的對?
uj5u.com熱心網友回復:
據我所知,Spring Boot 不支持開箱即用Pair。kotlin-stdlib
Spring 不知道如何以任意方式決議任意類。然而,Spring 確實支持遵循 Bean 約定的類。
因此,您的問題至少有三種解決方案:
- 只需按照問題中的說明進行決議
Map并將您的轉換Map<String, Int>為 aList<Pair<String, Int>>,例如通過呼叫map.toList(),請參閱官方檔案。
您可以為串列提供自定義 getter。
val knapsacksList: List<Pair<String, Int>>
get() { knapsacks.toList() }
- 調整你
application.yml以符合Pair. APair是一個簡單的資料類,有兩個值first和second。如果您在 .yml 檔案中提供這些,Spring 可以相應地決議它們。
以下內容可能會起作用。
...
user-parameters:
knapsacks:
- first: "James"
second: 102"
- first: "Mary"
second: 185
- 為您的用例提供自定義
Converter。網上有關于如何實作這一點的資源,例如來自baeldung.com。
請注意,我已經在手機上寫了這個答案,因此我無法測驗其中的任何內容,并且可能存在輕微的拼寫錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511612.html
標籤:弹簧靴科特林yaml
上一篇:科特林。運行時錯誤:執行緒“main”中的例外java.lang.IndexOutOfBoundsException:索引:1,大小:1
