これら3つのアノテーションの違いを区別する要約を見つけることができないようです。
これら3つのアノテーションの違いを区別する要約を見つけることができないようです。
回答:
@NotNull
:CharSequence、Collection、Map、またはArrayオブジェクトはnullではありませんが、空にすることができます。
@NotEmpty
:CharSequence、Collection、Map、またはArrayオブジェクトはnullではなく、サイズ> 0です。
@NotBlank
:文字列はnullではなく、トリミングされた長さはゼロより大きいです。
理解を助けるために、これらの制約がどのように定義され、実行されるかを見てみましょう(私はバージョン4.1を使用しています):
@NotNull
制約は次のように定義されています。
@Constraint(validatedBy = {NotNullValidator.class})
このクラスには、isValid
次のように定義されたメソッドがあります。
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
@NotEmpty
制約は次のように定義されています。
@NotNull
@Size(min = 1)
だから、この制約は使用@NotNull
上の制約、および @Size
その定義が異なったオブジェクトに基づいていますが、自己explanitoryでなければなりませんが。
最後に、@NotBlank
制約は次のように定義されます。
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
したがって、この制約でも@NotNull
制約が使用されますが、NotBlankValidatorクラスでも制約されます。このクラスには、isValid
次のように定義されたメソッドがあります。
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
興味深いことに、このメソッドは、文字列がnullの場合はtrueを返しますが、トリミングされた文字列の長さが0の場合にのみfalseを返します。前述のように、@NotEmpty
定義でもが必要なため、nullの場合はtrueを返します@NotNull
。
以下にいくつかの例を示します。
文字列名= null;
@NotNull
:false
@NotEmpty
:false
@NotBlank
:false
文字列名= "";
@NotNull
:true
@NotEmpty
:false
@NotBlank
:false
文字列名= "";
@NotNull
:true
@NotEmpty
:true
@NotBlank
:false
文字列名= "すばらしい答え!";
@NotNull
:true
@NotEmpty
:true
@NotBlank
:true
以下のリンクの説明が気に入りました:http : //www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:内容を無視して、値がnullでないかどうかをチェックします
@NotEmpty:値がnullでも空でもないかどうかをチェックします。空のスペースしかない場合は、空でないことを許可します。
@NotBlank:値がnullでも空でもないかどうかをチェックし、最初に値をトリミングします。つまり、空のスペースだけを許可するわけではありません。
したがって、フィールドがnullではなく、空のスペースだけではなくテキストであることを検証する場合は、@ NotBlankを使用する必要があります。
@NotNull:
制約されたCharSequence、Collection、Map、またはArrayは、nullでない限り有効ですが、空でもかまいません@NotEmpty:
制約されたCharSequence、Collection、Map、またはArrayは、nullでなく、サイズ/長さがゼロより大きい限り有効です。@NotBlank:
制約された文字列は、それがnullでなく、トリムされた長さがゼロより大きい限り有効です。