値が(のIntelliJ IDEAで)複雑な構造であるマップで正しく春ブート構成のプロセッサを動作させるために、それは可能ですか?

amseager:

問題を再現するソースコード:リンク

私は、構成プロパティの構造のこの種を持っていると仮定します。

    @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.ymlIこの方法でそれらを設定します。

props:
  testString: asdadasd
  somWrongProperty: asdasd
  testMap:
    key1:
      innerString: value1
      innerInt: 1
      someInnerWrongProperty: wrongvalue
    key2:
      innerString: value2
      innerInt: 2

単純なプロパティが正しく動作処理注釈を起動した後(あなたがクリックすることにより、その宣言に移動することができますctrlまた、彼らは働くためにオートコンプリート、)。プロパティが間違っていると、それを強調している場合も、IDEAを検出します。

(マップ値です)ネストされた構造のため、これらの機能の両方が正常に動作していないようです。あなたはまだそれらをクリックすることができますが、IDEAは、マップの宣言に移動します。また、コードマップ値の完了と間違ったフィールドのハイライト表示は動作しません。

IDEAからのスクリーンショット:

ここでは、画像の説明を入力します。

誰もがそれを正しく動作させるために方法を知っていますか?付属のコード例を使用して自由に感じます。

前もって感謝します。

マークBramnik:

私はあなたが追加について求めていると考えています

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

中にいくつかのアノテーションを付けたクラスを検出することができ、コンパイルプロセスに特別なフック-これは基本的に注釈プロセッサでコンパイル時、その定義に基づいて、いくつかのリソースを生成します。いくつかの注釈プロセッサこの1つはしかし、クラスがで注釈が付けイントロスペクトし、他のソースファイルを生成し@ConfigurationProperties、それは特別なJSONファイル(META-INF /春な設定metadata.jsonを生成し、このクラスで見つかった反射により、フィールド名とタイプに基づいてtargetビルドディレクトリ)。

あなたはそれを開くと、それはように見えるんどのように見ることができます。

今、このプロセス上のノートのカップル:

  1. それはコンパイル時に起こるので - それは見ていません application.yaml
  2. 一般的に生成されたJSONは、実行時に春ブーツ自体によって使用されるが、それらは、いくつかの気の利いた統合を構築することができるようにIDEのためのものではありません。それはIntelliJのは、基本的に何をするかです。

さて、IntelliJの(唯一のアルティメットエディション、コミュニティ版は、春と任意の統合が含まれていないので)実際にこのファイルを読み込み、いくつかの自動補完機能を提供することができます。

しかしマップを含む設定プロパティで提供される情報に基づいて、注釈プロセッサを(再度コンパイル時に実行され、唯一のクラスへのアクセスを有すること)あくまで一例のキーの正しい値を生成することができません。IntelliJのは、あなたがから選択することを提供しませんのでkey1key2彼らは構成プロパティのjavaファイルには存在しないので、。それは仕事をしない理由です。ボトムラインは、IntelliJのが有罪ではない、それはそれができる最善を尽くします:)

解像度の面では:

あなたが試すことができます2つの経路があります。

  1. 代わりに、キーとして文字列を使用しての、列挙型を使用しますそれは値の有限かつ明確に定義されたセットを持っているので、( -むしろそのバグや、注釈プロセッサの向上のための要求を、そうでない場合は)多分注釈プロセッサがより良いJSONを生成します。

  2. 注釈プロセッサは、その最高の仕事をしていることを仮定すると、常に成功していない、で説明するように手動でJSONを定義することができます春ブーツのドキュメント

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362489&siteId=1