2017-08-16 11 views
0

私はSpringの@Value注釈によって2つのパラメータを注入しています。 minLengthおよびmaxLength。論理的にminLengthmaxLengthより大きくてはならず、その逆もありません。これは私が試したものの、失敗したものです。Spring @注入フィールド間の注入フィールド検証@

例外がmaxLengthのが0ことでスローされ、しかし、私のapplication.propertiesに私がmaxLengthの値ではないので、約0を文句一つは、あなたのカスタム検証コードである(検証する前にテスト済み)7

private int minLength; 
private int maxLength; 

@Min(5) 
@Value("${ com.manudcamera.webapi.uuid.minLength : 5} ") 
private void setMinLength(int minLength) { 
    if (minLength > this.maxLength) throw new IllegalArgumentException("minimum length cannot be greater than maximum length | min len: " + minLength + " max len: " + this.maxLength); 
    this.minLength = minLength; 
} 

@Max(50) 
@Value("${ com.manudcamera.webapi.uuid.maxLength : 15 }") 
private void setMaxLength(int maxLength) { 
    if (maxLength < this.minLength) throw new IllegalArgumentException("maximum length cannot be greather than minimum length | min len: " + minLength + " max len: " + maxLength); 
    this.maxLength = maxLength; 
} 
+0

'@ Value'を使って注入するクラスをインスタンス化する、' new'を使う、または他のインスタンスに注入する方法を教えてください。 – dabaicai

+0

クラスはSpringによって管理されています(@ Component'の注釈付き) – XPLOT1ON

答えて

2

として設定しましたsetMinavalueが呼​​び出されるまでにまだセットされています(つまり0です)。

可能なアプローチの1つは、クロス検証を行うカスタムメソッドに対してPostConstructアノテーションを使用することです。

可能な別のアプローチは、クロスフィールド検証を行う独自のカスタムバリデーター(クラスレベルで適用する)を実装することです。

+0

私はそれを理解しますが、minLengthがmaxLengthより大きい場合をどのように検証しますか? – XPLOT1ON

+0

更新された回答、最初の文章を書いた後であなたの問題を完全に理解しました。 –

+0

PostConstructは期待どおりに動作します、ありがとう – XPLOT1ON

-1

Beanクラスで次のアノテーションを追加できます。

@PropertySource(value = {"classpath:application.properties"}) 

となります。

関連する問題