Hibernate Validator 4.1+ は、空白をトリミングした後に@NotBlank
null でなく空でないことをチェックする、カスタムの文字列のみの注釈を提供します。状態の API ドキュメント: @NotBlank
NotEmpty との違いは、末尾の空白が無視されることです。
これがチェックの前に文字列をトリミングしていることがわからない場合は、最初に 4.1 ドキュメントの「組み込みの定数」@NotEmpty
の表の下にある説明を参照してください。
注釈付き文字列が null ではなく、トリミングされた長さが 0 より大きいことを確認してください。@NotEmpty との違いは、この制約は文字列にのみ適用でき、末尾の空白は無視されることです。
次に、コードを参照すると、次のように定義され@NotBlank
ていることがわかります。
@Documented
@Constraint(validatedBy=NotBlankValidator.class)
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(value=RUNTIME)
@NotNull
public @interface NotBlank{
/* ommited */
}
この定義には 2 つの注意点があります。1 つ目は、 の定義に@NotBlank
includesが含まれ@NotNull
ているため、 の拡張です@NotNull
。2 つ目は、NotBlankValidator.class@NotNull
を使用して拡張することです。@Constraint
このクラスには次のisValid
メソッドがあります。
public boolean isValid(CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) {
if ( charSequence == null ) { //this is curious
return true;
}
return charSequence.toString().trim().length() > 0; //dat trim
}
興味深いことに、このメソッドは、文字列が null の場合は true を返しますが、トリミングされた文字列の長さが 0 の場合にのみ false を返します。前述のように、@NotEmpty 定義には @NotNull も必要であるため、null の場合に true を返すことは問題ありません。 .