簡體   English   中英

如何從 Spring 文件中的 YAML 文件中讀取 Object 的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM