web-dev-qa-db-ja.com

Hibernate Validator-@Length-最小と最大に個別のメッセージを指定する方法は?

私の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を試しましたが、彼らは私が望むことをしません。どんな入力でも大歓迎です!

19
javagruffian

次のように、内部 リスト注釈 (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 をお勧めします。

46
Gunnar

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;

メッセージ補間を使用することで、フィールドサイズのハードコーディングを回避できることに注意してください。

9
Chanoch

ドキュメントによると、1つのメッセージで@Length(min=, max=)を使用できます。次に、メッセージを「フィールドは5〜50文字にする必要があります」に変更します。

7
atrain