2017-05-16 10 views
5

を施行しますその小道具が存在する場合。存在しない場合、デフォルトは25になります。春@value注釈は、私は、デフォルト値を指定して、<code>@Value</code>で注釈を付け、次のフィールドを持って最小最大のint

このintフィールドにminとmaxを強制することで、さらにステップを進めたいと思います。これは、マーフィーの法律は誰か(おそらく私)が外部から誤ってプロパティを誤って設定することを意味し、実行時に私のアプリが奇妙なことをやり始めてしまうのです。アプリケーションの起動時にプロパティが "101"または "-1"に設定されていると、エラーがスローされます。ヘック、@Value注釈で101にデフォルト設定しようとするとエラーがスローされることもありますが、この質問の目的には重要ではありません。ここに私が試したものです:

//@Min and @Max don't produce the intended behavior when combined with @Value 
@Min(0) 
@Max(100) 
@Value("${tolerance.percentage:25}") 
private int tolerance; 

私は@Valueが知っていることをintフィールド上の最小値と最大値を強制することはできますか?

+0

'を[値]は、あなたがそのBeanを持っているかのようにシングルトンのための起動時間(、ないで値を注入@。 'prototype');私はあなたがその時に(自動的に)トリガーされた検証を持っているとは思わないでしょう... –

+3

通常のクラスではない' @ ConfigurationProperties'クラスでのみ検証が行われます。 –

+0

@ M.Deinum私のpojoに '@ConfigurationProperties'を追加しました。追加した後、注釈は一緒に働き始めました。私は彼らがあなたのコメントを正式にするなら答えに私はそれを受け入れる。 – JellyRaptor

答えて

4

正規の検証APIアノテーションを使用した検証は、特定の状況でのみ機能します。あなたは、彼らがしているクラスがexternalized configuration

ので、代わりのあなたはおそらくしたいものと@Valueを使用して結合するために使用されているクラスパス

  • に(「・バリデータを休止」)の実装を持って

    1. 期待されるプロパティを含むクラスを作成し、@ConfigurationPropertiesでバインディングを使用します。 (代わりに@Rangeを使用することもできます)。

      @ConfigurationProperties(prefix="tolerance") 
      public ToleranceProperties { 
      
          @Range(min=1, max=100) 
          private int percentage = 25; 
      
          // Here be a getter/setter 
      } 
      

      @Configurationクラスに結合されるこのを@ EnableConfigurationProperties(ToleranceProperties.class)を追加し、あなたはそれがどこでもあなたがプロパティを必要とする使用することができます。 (リファレンスガイドのtypesafe configuration propertiesを参照してください

      注:また@Componentとしてそれを宣言することができ

  • +0

    ゲッターがではない間、私はちょうどこのセッターを動作させるために必須であることを追加します – Zotov

    +0

    'ゲッターなしでこれを持つことは、どのように価値を得るでしょうか? (それが別の組み合わせられた財産の一部でない限り)。 –

    +0

    '@ Component'に' @ ConfigurationProperties'を付けることができます。そして、このコンポーネントはこれらのプロパティを内部的に使用します。 – Zotov

    関連する問題