私のWebアプリでフォームの検証にHibernateバリデーターを使用しています。次のように、String属性に@Lengthアノテーションを使用しています。
@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を試しましたが、彼らは私が望むことをしません。どんな入力でも大歓迎です!
次のように、内部 リスト注釈 (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;
ところで移植性の理由から、@Length
よりもBean Validation APIで定義されている @ Size をお勧めします。
Java standard 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;
メッセージ補間を使用することで、フィールドサイズのハードコーディングを回避できることに注意してください。
ドキュメントによると、1つのメッセージで@Length(min=, max=)
を使用できます。次に、メッセージを「フィールドは5〜50文字にする必要があります」に変更します。