[英]How to Read Array of Object from YAML file in Spring
我們正在開發基於 Spring 的應用程序,該應用程序需要訪問和讀取存儲在 yaml 文件中的某些憑據,該文件使用以下格式:
#yaml file content
...
secrets: username1:pw1, username2:pw2
...
我們使用這樣的 PropertySource 注釋加載 yaml 文件
@PropertySources({
@PropertySource(value = "file:/someSecretPath/secrets.yaml", ignoreResourceNotFound = true) // secret yaml file
})
我嘗試使用以下代碼將其解析為 map object 的數組,因為它是一個包含 2 個 object 類型的列表,
@Repository
public class getSecretClass {
@Value("${secrets}")
private Map<String,String>[] credentials;
}
但它失敗並出現此錯誤:
... 'java.lang.string' cannot be converted into java.lang.map[] ....
另一方面,我測試了從像這樣的簡單字符串數組中讀取:
#yaml file content
...
secrets: text1, text2
...
並且下面的代碼可以正常工作:
@Repository
public class getSecretClass {
@Value("${secrets}")
private String[] credentials;
...
private someReadSecretMethod(){
System.out.println( credentials[0] );
}
}
它將按預期打印“text1”。 但是我們確實需要在我的用例中將憑據成對存儲,純文本對我不起作用。
任何建議或意見將不勝感激!
如果不是有點冗長,為什么不做一些對眼睛更容易,更容易編程的事情:
secrets:
- username: username1
password: pwd1
- username: username2
password: pwd2
為您的秘密准備一個 class:
public class Secret {
private String username;
private String password;
public String toString() { return username + ":" password; }
}
然后注入為
@Value("${secrets}")
List<Secret> secrets;
如果必須使用 map。 我認為 map 陣列可能不是您想要的。 也許您需要一個 map,其中包含兩個密鑰,用戶名 1 和用戶名 2。 下面可能會告訴您如何獲取 map。
yml文件內容就是這樣。
secrets: "{username1:pw1,username2:pw1}"
Java碼域就是這樣。
@Value("#{${secrets}}")
public Map<Integer,Integer> secrets;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.