2013-06-16 4 views

答えて

230

@NotNull:のCharSequence、コレクション、地図やArrayオブジェクト nullではありませんが、空にすることができます。
@NotEmpty:CharSequenceオブジェクト、Collectionオブジェクト、MapオブジェクトまたはArrayオブジェクトがnullでないおよびsize> 0です。
@NotBlank:文字列がヌルでないで、トリムされた長さがゼロより大きい

  1. @NotNull制約は次のように定義されます:

    @Constraint(validatedBy = {NotNullValidator.class}) 
    

    、あなたが理解するのに役立つのは、これらの制約が定義されているかを調べて(私はバージョン4.1を使用しています)を行うようにする

    このクラスは、isValidメソッドを以下のように定義しています。

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { 
    return object != null; 
    } 
    
  2. @NotEmpty制約は次のように定義される。したがって、この制約がその定義オブジェクトに基づいて異なるが、自己explanitoryなければならない@NotNull上記制約、@Sizeを使用

    @NotNull 
    @Size(min = 1)  
    

    。したがって、この制約はまた@NotNull制約を使用しますが、またNotBlankValidatorクラスに制約

    @NotNull 
    @Constraint(validatedBy = {NotBlankValidator.class})   
    

  3. は最後に、@NotBlank制約は次のように定義されます。このクラスは、次のように定義isValid方法ました:

    if (charSequence == null) { //curious 
        return true; 
    } 
    return charSequence.toString().trim().length() > 0; 
    

    は興味深いことに、このメソッドは文字列がnullの場合はtrueを返しますが、偽の場合とトリミングされた文字列の長さが0である場合にのみ、場合にはtrueを返すこと大丈夫です上記のとおり、@NotEmptyの定義には@NotNullが必要なため、nullです。ここで

は、いくつかの例です:

  1. 文字列名= NULL;
    @NotNull:偽
    @NotEmpty:偽
    @NotBlank:偽

  2. 文字列名= "";
    @NotNull
    @NotEmpty:偽
    @NotBlank:偽

  3. 文字列名= "「;
    @NotNull
    @NotEmpty
    @NotBlank:偽

  4. 文字列名= "偉大な答え!"。
    @NotNull
    @NotEmpty
    @NotBlank

+25

私はこの情報を自分で追跡するのに時間を費やしました。私は他の人がその努力から恩恵を受けるのを助けたかったのです。 「はっきりするためには、あなた自身の質問に答えるだけでは不十分であり、明示的に奨励されている」 http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –

+2

私の意見では、@ NotBlankはnullを受け入れるべきです。空白が無効なオプションフィールドの場合、nullを受け入れる場合があります。 – tbraun

+1

私はそれに同意します。 nullでなく空でない場合は、両方を使用できます。それが当てはまらないので、あなた自身のバリデーターを書いて、それをあなたが期待する通りに使うことができます。 –

1

私は下のリンクで説明を気に入っ: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

@NotNull:値かどうかをチェックしますコンテンツを無視してnullではない

@NotEmpty:値がnullでも空でもないかどうかをチェックします。スペースが空白の場合は、空ではないことができます。

@NotBlank:値がヌルでも空でもないかどうかをチェックし、値を最初にトリミングします。それは、ただ空のスペースを許さないことを意味します。

したがって、フィールドがnullではなく、空白だけでなくテキストでもないことを検証する場合は、@ NotBlankを使用する必要があります。

関連する問題