1. 概要

このチュートリアルでは、YAMLファイルで定義されたプロパティを使用して、POJOクラスのMapの値を構成する方法について説明します。

2. POJOとYAML

POJOクラスは、 Plain Old JavaObjectsです。 YAMLは、インデントを使用してネストを示す、人間が読み取れる構造化データ形式です。

2.1. 単純なマップの例

オンラインストアを運営していて、服のサイズを翻訳するサービスを作成していると想像してみてください。 当初は英国でのみ販売しております。 「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..
}

@ConfigurationPropertiesprefixの値に注意してください。 次のセクションで説明するように、YAMLファイルの同じルート値でマッピングを定義します。

また、Application.classで次のアノテーションを使用して構成プロパティを有効にすることを忘れないでください。

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

2.2. YAML構成

ここで追加します t-shirt-size YAML構成に。

application.ymlファイルで次の構造を使用できます。

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

インデントとスペースに注意してください。 YAMLはインデントを使用してネストを示します。 推奨される構文は、ネストされたレベルごとに2つのスペースです。

使用方法に注意してください simple-mapping ダッシュで、しかし私たちのクラスの私たちのプロパティ名は呼ばれています simpleMapping.  ダッシュ付きのYAMLプロパティは、コード内で同等のキャメルケースに自動的に変換されます。

2.3. より複雑なマップの例

英国のショップで成功した後、サイズを他の国の測定値に変換することを検討する必要があります。 たとえば、フランスと米国のラベル「S」のサイズを知りたいとします。 構成にデータの別のレイヤーを追加する必要があります。

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の対応するフィールドは、マップのマップになります。

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

3. 結論

この記事では、単純なPOJOのYAML構成ファイルで単純でより複雑なネストされたマップを定義する方法を説明しました。

この記事のコードは、GitHubから入手できます。