java - हाइबरनेट वैलिडेटर 4.1+ में, @NotNull, @NotEmpty, और @NotBlank के बीच क्या अंतर है?




hibernate validation (2)

मैं ऐसा सारांश नहीं ढूंढ पा रहा हूं जो इन तीन एनोटेशन के बीच अंतर को अलग करता है।


मुझे नीचे दिए गए लिंक में स्पष्टीकरण पसंद आया: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

@NotNull: यह जांचता है कि सामग्री शून्य नहीं है, सामग्री को अनदेखा कर रहा है

@NotEmpty: यह जांचता है कि मान शून्य नहीं है और न ही खाली है। यदि इसमें खाली रिक्त स्थान हैं, तो यह इसे खाली नहीं होने देगा।

@NotBlank: यह जांचता है कि मान शून्य नहीं है और न ही खाली है, पहले मूल्य को कम कर रहा है। इसका मतलब है कि, यह केवल खाली रिक्त स्थान की अनुमति नहीं देगा।

इसलिए, यदि आप यह सत्यापित करना चाहते हैं कि कोई फ़ील्ड शून्य नहीं है लेकिन यह भी कि खाली रिक्त स्थान नहीं हैं, लेकिन टेक्स्ट, आपको @NotBlank का उपयोग करना चाहिए।


@NotNull : CharSequence, संग्रह, मानचित्र या ऐरे ऑब्जेक्ट शून्य नहीं है , लेकिन खाली हो सकता है।
@NotEmpty : @NotEmpty , संग्रह, मानचित्र या ऐरे ऑब्जेक्ट शून्य और आकार> 0 नहीं है
@NotBlank : स्ट्रिंग शून्य नहीं है और छंटनी की लंबाई शून्य से अधिक है

आपको समझने में सहायता के लिए, देखते हैं कि इन बाधाओं को कैसे परिभाषित किया जाता है और किया जाता है (मैं संस्करण 4.1 का उपयोग कर रहा हूं):

  1. @NotNull बाधा को इस प्रकार परिभाषित किया गया है:

    @Constraint(validatedBy = {NotNullValidator.class})  
    

    इस वर्ग में एक isValid विधि है जिसे परिभाषित किया गया है:

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
     return object != null;  
    }
    
  2. @NotEmpty बाधा को इस प्रकार परिभाषित किया गया है:

    @NotNull  
    @Size(min = 1)    
    

    तो यह बाधा उपरोक्त @Size बाधा का उपयोग करती है, और @Size जिसे परिभाषा वस्तु के आधार पर अलग करती है लेकिन स्वयं @Size होना चाहिए।

  3. अंत में, @NotBlank बाधा को इस प्रकार परिभाषित किया गया है:

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

    तो यह बाधा @NotNull बाधा का भी उपयोग करती है, लेकिन NotBlankValidator क्लास के साथ भी बाधा डालती है। इस वर्ग में एक isValid विधि है जिसे परिभाषित किया गया है:

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

    दिलचस्प बात यह है कि स्ट्रिंग शून्य होने पर यह विधि सच हो जाती है, लेकिन झूठी अगर केवल तभी होती है जब ट्रिम किए गए स्ट्रिंग की लंबाई 0 होती है। यह ठीक है कि यह शून्य हो जाता है क्योंकि यह शून्य है क्योंकि, जैसा कि मैंने उल्लेख किया है, @NotEmpty परिभाषा को @NotEmpty भी आवश्यकता है ।

कुछ उदाहरण निम्नलिखित हैं:

  1. स्ट्रिंग नाम = शून्य;
    @NotNull : झूठी
    @NotEmpty : झूठी
    @NotBlank : झूठी

  2. स्ट्रिंग नाम = "";
    @NotNull : सच
    @NotEmpty : झूठी
    @NotBlank : झूठी

  3. स्ट्रिंग नाम = "";
    @NotNull : सच
    @NotEmpty : सच है
    @NotBlank : झूठी

  4. स्ट्रिंग नाम = "महान जवाब!";
    @NotNull : सच
    @NotEmpty : सच है
    @NotBlank : सच है





bean-validation