2017-11-02 13 views
0

私はこれを何時間も頭の中に入れようとしてきましたが、私が間違っていることはあまり意味がありません。 .ymlファイルからJavaでMapオブジェクトを作成しようとしています。理由は地図のため、私は何/何人の子供が「現在」の下に表示されるのかわからないので、私はむしろそれから地図オブジェクトを作成する動的な方法を持っています。yamlの設定を読んで

以下は私の.ymlファイルです。私は、「現在」の下で、キーと値のペアを希望:

以下
present: 
    now: LOCAL TESTING 
    later: testing 

は(コメントアウトすべては私が試したものです - 異なる組み合わせで)私のconfigクラスです:

//@Data 
@Component 
@EnableConfigurationProperties 
@ConfigurationProperties(prefix = "present") 
//@ConfigurationProperties 
public class stat { 

    //@Getter 
    //@Data 
    @Value("${present}") 
    private Map<String, String> present; 
    //private Map<String, String> present = new HashMap<String, String>(); 

} 

私が試しました他のSOの投稿を見て、私はそれを理解するように感じるが、私のSpring Boot(v1.5.8)アプリケーションはその価値を見ていない。それは私のためにエラーをスローし続けるか、またはマップオブジェクトはnullです(または入力されていない)。

私は以下のコードを単一の値を取得しようとすると、それが動作するので、私はこの.ymlファイルから値を読み取ることができることを知っている:ここでは

@Data 
@Value("${present.now}") 
private String status; // String value "LOCAL TESTING" 

は私がきた他のリンクあり試してみました:

Spring Boot yaml configuration for a list of strings

how to convert yml file to java pojo

私は明らかに何かが足りないのですか?ありがとう!

答えて

0

読み込みしようとしているyml構造を表すPOJOを作成しようとすることができます。例えば

:@valueが必要とされていない

と@ConfigurationPropertiesでプレフィックスparamはありません:

@Configuration 
@ConfigurationProperties(prefix = "present") 
@Data 
public class Present { 

    private String now; 

    private String later; 
} 
+0

この応答をありがとうが、私はこのマップオブジェクトを作成しようとしています。元の質問で言及しなかったことは、キーが重複しない以外は子供がわからないということでした。むしろ、それらの値をハードコードするのではなく動的にマップオブジェクトを作成できるPOJOを作成しました。 – rj2700

0

は、だから私は(後でこの問題を持っている人のために)それを考え出しました必要です。

あなたが望むフィールドにゲッターメソッドを持たせる必要があります - 私はLombokライブラリがこれらを自動生成したと思っていましたが、間違っていました(後で詳細を読む必要があります)@Setterと@Dataは動作しません正しく)。

だから、このようなものになります。

@Component 
@EnableConfigurationProperties 
@ConfigurationProperties 
public class stat { 

    private Map<String, String[]> present = new HashMap<String, String[]>(); 

    public Map<String, String[]> getPresent() { 
     return present; 
    } 
} 

を今度は、もっと複雑な例(ネストされたマップ)を与えてみましょう。私.ymlファイルはこのようになっていることを言う:

parent: 
    present: 
     foo: dey, tok 
     bar: ar, jerbs 
    later: 
     foo: day, dok 
     mar: r, darbs 

POJOは、次のようになります。注意すべき

@Component 
@EnableConfigurationProperties 
@ConfigurationProperties 
public class stat { 

    private Map<String, Map<String, String[]>> parent = new HashMap<String, Map<String, String[]>>(); 

    public Map<String, Map<String, String[]>> getParent() { 
     return parent; 
    } 
} 

もう一つの重要なことは、あなたから値を取得しているフィールドが一致しなければならないということです変数名 - 接頭辞を使用するかどうかは関係ありませんが、それでも私にとってはうまくいきません。お役に立てれば。

関連する問題