2011-08-16 10 views
13

私はWebアプリケーションでフォーム検証にHibernateバリデータを使用しています。次のように私は私の文字列の属性の@Lengthアノテーションを使用しています:Hibernate Validator - @Length - minとmaxに別々のメッセージを指定する方法は?

@Length(min = 5, message = "The field must be at least 5 characters") 
private String myString; 

文字列が50文字を超える場合しかし、私は別のメッセージを表示する必要があります。これを行うには、すぐに使える@Lengthバリデーターを使用する方法がありますか?次のように私がやりたいものの例は、(コンパイラが私をさせません)です。

@Length(min = 5, message = "The field must be at least 5 characters") 
@Length(max = 50, message = "The field must be less than 50 characters") 
private String myString; 

私は@Maxと@Minを試してみましたし、彼らは私がやりたいことはありません。どんな入力も大歓迎です!

答えて

36

list annotation(Bean Validation/Hibernate Validatorの各制約タイプで定義されています)を使用して、1つの要素に複数の@Length制約を指定することができます。このように:

@List({ 
    @Length(min = 5, message = "The field must be at least 5 characters"), 
    @Length(max = 50, message = "The field must be less than 50 characters") 
}) 
private String myString; 

Btw。移植性の理由から、@Length以上のBean検証APIで定義された@Sizeを使用することをお勧めします。

+0

これはまさに私が探していたものです! – javagruffian

+0

Bean Validation 2.0/Hibernate Validator 6の時点で、明示的な '@List'アノテーションを必要とせずに' @ Length'と他の制約を何度も指定できることに注意してください。 – Gunnar

7

ドキュメントによれば、@Length(min=, max=)と1つのメッセージを使用できます。

+0

はい、私はこのソリューションが気に入っていますが、残念ながら別のメッセージで実装する必要があります。 – javagruffian

+2

MinとMaxの両方をチェックし、それぞれに個別のメッセージを持つカスタム制約を作成できます。http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html – atrain

6

あなたはJavaの標準javax.validation.constraint.Sizeを使用する場合は、あなたが同じことをこのように達成することができます:

@Size.List ({ 
    @Size(min=8, message="The field must be at least {min} characters"), 
    @Size(max=60, message="The field must be less than {max} characters") 
}) 
private String myString; 

お知らせメッセージ補間を使用して、フィールドのサイズをハードコーディングを避けることができます。

関連する問題