Hibernate Validator 4.1+ में, @NotNull, @NotEmpty और @NotBlank के बीच क्या अंतर है?


जवाबों:


314

@NotNull: The CharSequence, Collection, Map या Array ऑब्जेक्ट शून्य नहीं है , लेकिन खाली हो सकता है।
@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)    

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

  3. अंततः @NotBlank बाधा के रूप में परिभाषित किया गया है:

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

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

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

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

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

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

  2. स्ट्रिंग नाम = "";
    @NotNull: सत्य
    @NotEmpty : असत्य
    @NotBlank: असत्य

  3. स्ट्रिंग नाम = "";
    @NotNull: सच
    @NotEmpty : सच
    @NotBlank : गलत

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


29
मैंने इस जानकारी को अपने दम पर ट्रैक करने में कुछ समय बिताया, और मैं उस प्रयास से दूसरों की मदद करना चाहता था। "क्रिस्टल स्पष्ट होने के लिए, अपने प्रश्न को पूछना और उत्तर देना केवल ठीक नहीं है, यह स्पष्ट रूप से प्रोत्साहित किया गया है।" blog.stackoverflow.com/2011/07/…
रिक

4
मेरी राय में, @NotBlank SHOULD को शून्य स्वीकार करना चाहिए। ऐसे कुछ मामले हैं जिन्हें आप वैकल्पिक क्षेत्रों के लिए शून्य मानेंगे, जहाँ रिक्त केवल अमान्य है।
टिब्बुन

1
मैं इससे सहमत हूँ। यदि आप रिक्त नहीं हैं और खाली नहीं चाहते हैं, तो आप दोनों का उपयोग कर सकते हैं। चूंकि यह मामला नहीं है, आप अपने स्वयं के सत्यापनकर्ता को लिख सकते हैं और उपयोग कर सकते हैं जैसा कि आप उम्मीद करते हैं।
रिक हैनलॉन II

1
बस एक ध्यान दें: @NotNull का उपयोग किसी भी ऑब्जेक्ट के साथ किया जा सकता है, न कि केवल "CharSequence, Collection, Map या Array"; जैसा कि वास्तव में कोड आपने बिंदु 1 में डाला है।
निकोलो

@RickHanlonII आपको सुझाव दे सकता है कि यह हाइबरनेट वैलिडेटर 5+ में कैसे मान्य हो रहा है। ऐसा प्रतीत नहीं होता है कि ConstraintValidatorइन एनोटेशनों के साथ अब कोई संबंध है
स्टीव

7

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

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

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

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

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


1
  1. @NotNull: जब तक यह अशक्त नहीं है तब तक एक विवशता, संग्रह, नक्शा, या ऐरे मान्य है, लेकिन यह खाली हो सकता है
  2. @NotEmpty: जब तक यह अशक्त नहीं है, तब तक एक विवशता, संग्रह, मानचित्र, या ऐरे मान्य है और इसका आकार / लंबाई शून्य से अधिक है।
  3. @NotBlank: एक संकुचित स्ट्रिंग तब तक मान्य है जब तक यह शून्य न हो और छंटनी की लंबाई शून्य से अधिक हो।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.