Javax.validation.constraints से एनोटेशन काम नहीं कर रहे हैं




spring annotations (6)

आप कम से कम @NonNull परिदृश्य के लिए , lombok लाइब्रेरी के साथ @NonNull का भी उपयोग कर सकते हैं । अधिक जानकारी: https://projectlombok.org/api/lombok/NonNull.html

javax.validation.constraints जैसे @Size , @Size , आदि से एनोटेशन का उपयोग करने के लिए किस कॉन्फ़िगरेशन की आवश्यकता है? मेरा कोड यहाँ है:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Person {
      @NotNull
      private String id;

      @Size(max = 3)
      private String name;

      private int age;

      public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
      }
}

जब मैं इसे किसी अन्य वर्ग में उपयोग करने का प्रयास करता हूं, तो सत्यापन कार्य नहीं करता है (यानी वस्तु बिना त्रुटि के बनाई गई है):

Person P = new Person(null, "Richard3", 8229));

यह id और name लिए बाधाओं को लागू क्यों नहीं करता है? मुझे और क्या करने की जरूरत है?


आपको प्रत्येक सदस्य चर में @Valid जोड़ने की आवश्यकता है, जो एक ऑब्जेक्ट भी था जिसमें सत्यापन बाधाएं थीं।


मेरे मामले में मेरे पास एक कस्टम क्लास-स्तरीय बाधा थी जिसे बुलाया नहीं जा रहा था।

@CustomValidation // not called
public class MyClass {
    @Lob
    @Column(nullable = false)
    private String name;
}

जैसे ही मैंने अपनी कक्षा में फ़ील्ड-स्तरीय बाधा को जोड़ा, या तो कस्टम या मानक, कक्षा-स्तर की बाधा ने काम करना शुरू कर दिया।

@CustomValidation // now it works. super.
public class MyClass {
    @Lob
    @Column(nullable = false)
    @NotBlank // adding this made @CustomValidation start working
    private String name;
}

मेरे लिए छोटी गाड़ी व्यवहार की तरह लगता है लेकिन मुझे लगता है कि चारों ओर काम करने के लिए काफी आसान है


मैं वसंत के लिए बिल्कुल नया हूं इसलिए कृपया नमक के अनाज के साथ मेरा जवाब लें। जब मैंने इसका इस्तेमाल किया तो मैं काम करने के लिए @NotNull भी नहीं मिला। मेरे पास इनपुट फ़ील्ड के साथ एक स्क्रीन थी, मैंने इसे भर नहीं दिया, और मेरी स्क्रीन को आगे बढ़ाया (कुछ डीबी को अंततः सहेजने के लिए)।

मैं अपने मस्तिष्क को केवल @NotBlank पर ठोकर खा रहा था। वैसे भी मेरा जवाब था। प्रश्न में क्षेत्र खाली था, मुझे लगता है कि यह "" या एक खाली स्ट्रिंग प्रति शून्य नहीं है। तो @NotBlank के लिए चेक पकड़ा गया था।

यह सुनिश्चित नहीं है कि इससे आपकी मदद मिलेगी, लेकिन अगर आप कुछ @ नॉटनल्स के साथ भी असफल रहे हैं तो इस संभावना की जांच करने में चोट लग सकती है।


यह जांचने के लिए कि क्या आप वैध हैं या नहीं, आपको सत्यापनकर्ता का उपयोग करना चाहिए।

Person person = ....;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
Set<ConstraintViolation<Person>> violations = validator.validate(person);

फिर, पुनरावृत्ति उल्लंघन सेट, आप उल्लंघन पा सकते हैं।


वसंत में काम करने के लिए जेएसआर -303 बीन सत्यापन के लिए, आपको कई चीजों की आवश्यकता है:

  1. एनोटेशन के लिए एमवीसी नेमस्पेस कॉन्फ़िगरेशन: <mvc:annotation-driven />
  2. जेएसआर -303 स्पेक जेएआर: validation-api-1.0.0.GA.jar (ऐसा लगता है कि आपके पास पहले से ही है)
  3. hibernate-validator-4.1.0.Final.jar एक कार्यान्वयन, जैसे कि हाइबरनेट सत्यापन, जो सबसे अधिक उपयोग किया जाने वाला उदाहरण प्रतीत होता है: hibernate-validator-4.1.0.Final.jar
  4. बीन को सत्यापित करने के लिए, सत्यापन एनोटेशन, या तो स्पेस जेएआर या कार्यान्वयन जेएआर से (जिसे आपने पहले से ही किया है)
  5. हैंडलर में आप मान्य करना चाहते हैं, उस ऑब्जेक्ट को एनोटेट करें जिसे आप @Valid साथ मान्य करना चाहते हैं, और उसके बाद त्रुटियों को कैप्चर करने के लिए विधि हस्ताक्षर में BindingResult शामिल करें।

उदाहरण:

@RequestMapping("handler.do")
public String myHandler(@Valid @ModelAttribute("form") SomeFormBean myForm, BindingResult result, Model model) {
    if(result.hasErrors()) {
      ...your error handling...
    } else {
      ...your non-error handling....
    }
}




bean-validation