如何在YAML中為POJO中Map配置資料? | Baeldung

banq發表於2020-08-20

介紹如何使用YAML檔案中定義的屬性為POJO類中Map物件配置值資料。
POJO類是普通的舊Java物件。YAML是一種人類可讀的結構化資料格式,它使用縮排來指示巢狀。
假設我們正在運營一個線上商店,並且正在建立一個可以有服裝尺寸的服務。首先,“ S”,“ M”,“ L”等標籤所指的英國尺寸。建立POJO配置類:

@ConfigurationProperties(prefix = "t-shirt-size")
public class TshirtSizeConfig {
 
    private Map<String, Integer> simpleMapping;
 
    public TshirtSizeConfig(Map<String, Integer> simpleMapping) {
        this.simpleMapping = simpleMapping;
    }
    
    //getters and setters..
}

注意帶有字首值的@ConfigurationProperties。我們將在YAML檔案中的相同根值下定義對映。

還需要記住在Application.class上啟用帶有以下注釋的配置屬性:

@EnableConfigurationProperties(TshirtSizeConfig.class)
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


現在,我們新增t-shirt-size到我們的YAML配置。在application.yml檔案中使用以下結構:

t-shirt-size:
  simple-mapping:
    XS: 6
    S:  8
    M:  10
    L:  12
    XL: 14


注意縮排和空格。YAML使用縮排來表示巢狀。對於每個巢狀級別,建議的語法是兩個空格。
請注意,我們使用的是simple-mapping帶有破折號,但我們在類中的屬性名稱稱為simpleMapping。帶有破折號的YAML屬性將自動轉換為等效的駝峰式程式碼。

使用更復雜的Map來更改application.yml:

t-shirt-size:
  complex-mapping:
    XS:
      uk: 6
      fr: 34
      us: 2
    S:
      uk: 8
      fr: 36
      us: 4
    M:
      uk: 10
      fr: 38
      us: 6
    L:
      uk: 12
      fr: 40
      us: 8
    XL:
      uk: 14
      fr: 42
      us: 10



的POJO中的相應欄位將是Map中Map:

private Map<String, Map<String, Integer>> complexMapping;


在GitHub上獲得本文的程式碼 

 

相關文章