問題を再現するソースコード:リンク。
私は、構成プロパティの構造のこの種を持っていると仮定します。
@Data
@ConfigurationProperties(prefix = "props")
public class ConfigProperties {
private String testString;
private Map<String, InnerConfigProperties> testMap;
}
@Data
public class InnerConfigProperties {
private String innerString;
private Integer innerInt;
}
でapplication.yml
Iこの方法でそれらを設定します。
props:
testString: asdadasd
somWrongProperty: asdasd
testMap:
key1:
innerString: value1
innerInt: 1
someInnerWrongProperty: wrongvalue
key2:
innerString: value2
innerInt: 2
単純なプロパティが正しく動作処理注釈を起動した後(あなたがクリックすることにより、その宣言に移動することができますctrl
また、彼らは働くためにオートコンプリート、)。プロパティが間違っていると、それを強調している場合も、IDEAを検出します。
(マップ値です)ネストされた構造のため、これらの機能の両方が正常に動作していないようです。あなたはまだそれらをクリックすることができますが、IDEAは、マップの宣言に移動します。また、コードマップ値の完了と間違ったフィールドのハイライト表示は動作しません。
IDEAからのスクリーンショット:
誰もがそれを正しく動作させるために方法を知っていますか?付属のコード例を使用して自由に感じます。
前もって感謝します。
私はあなたが追加について求めていると考えています
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
中にいくつかのアノテーションを付けたクラスを検出することができ、コンパイルプロセスに特別なフック-これは基本的に注釈プロセッサでコンパイル時、その定義に基づいて、いくつかのリソースを生成します。いくつかの注釈プロセッサこの1つはしかし、クラスがで注釈が付けイントロスペクトし、他のソースファイルを生成し@ConfigurationProperties
、それは特別なJSONファイル(META-INF /春な設定metadata.jsonを生成し、このクラスで見つかった反射により、フィールド名とタイプに基づいてtarget
ビルドディレクトリ)。
あなたはそれを開くと、それはように見えるんどのように見ることができます。
今、このプロセス上のノートのカップル:
- それはコンパイル時に起こるので - それは見ていません
application.yaml
- 一般的に生成されたJSONは、実行時に春ブーツ自体によって使用されるが、それらは、いくつかの気の利いた統合を構築することができるようにIDEのためのものではありません。それはIntelliJのは、基本的に何をするかです。
さて、IntelliJの(唯一のアルティメットエディション、コミュニティ版は、春と任意の統合が含まれていないので)実際にこのファイルを読み込み、いくつかの自動補完機能を提供することができます。
しかしマップを含む設定プロパティで提供される情報に基づいて、注釈プロセッサを(再度コンパイル時に実行され、唯一のクラスへのアクセスを有すること)あくまで一例のキーの正しい値を生成することができません。IntelliJのは、あなたがから選択することを提供しませんのでkey1
、key2
彼らは構成プロパティのjavaファイルには存在しないので、。それは仕事をしない理由です。ボトムラインは、IntelliJのが有罪ではない、それはそれができる最善を尽くします:)
解像度の面では:
あなたが試すことができます2つの経路があります。
代わりに、キーとして文字列を使用しての、列挙型を使用します。それは値の有限かつ明確に定義されたセットを持っているので、( -むしろそのバグや、注釈プロセッサの向上のための要求を、そうでない場合は)多分注釈プロセッサがより良いJSONを生成します。
注釈プロセッサは、その最高の仕事をしていることを仮定すると、常に成功していない、で説明するように手動でJSONを定義することができます春ブーツのドキュメント