これら 3 つの注釈の違いを区別する要約を見つけることができないようです。
3 に答える
@NotNull
: CharSequence、Collection、Map、または Array オブジェクトは nullではありませんが、空にすることができます。
@NotEmpty
: CharSequence、Collection、Map、または Array オブジェクトが null ではなく、サイズ > 0です。
@NotBlank
: 文字列が NULL ではなく、トリミングされた長さが 0 より大きいです。
理解を助けるために、これらの制約がどのように定義され、実行されるかを見てみましょう (私はバージョン 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
その定義はオブジェクトに基づいて異なりますが、一目瞭然です。最後に、
@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
ます@NotNull
。
以下にいくつかの例を示します。
文字列名 = null;
@NotNull
: 偽
@NotEmpty
: 偽
@NotBlank
: 偽文字列名 = "";
@NotNull
:真
@NotEmpty
: 偽
@NotBlank
: 偽文字列名 = " ";
@NotNull
:真
@NotEmpty
:真
@NotBlank
: 偽String name = "正解です!";
@NotNull
:真
@NotEmpty
:真
@NotBlank
:真