यदि आप जेएसआर 303 बीन सत्यापन का उपयोग करते हैं तो आप validation groups (groups
) का उपयोग कर सकते हैं।
मान लें कि आपके पास यह उपयोगकर्ता इनपुट है, जिसमें दो अनुभाग हैं। दो बूलियन इंगित करते हैं कि अनुभाग सक्षम या अक्षम हैं या नहीं। (बेशक आप @NotNull
की तुलना में अधिक उपयोगी व्याख्या का उपयोग कर सकते हैं)
public class UserInput {
boolean sectionAEnabled;
boolean sectionBEnabled;
@NotNull(groups=SectionA.class)
String someSectionAInput;
@NotNull(groups=SectionA.class)
String someOtherSectionAInput;
@NotNull(groups=SectionB.class)
String someSectionBInput;
Getter and Setter
}
आप समूहों के लिए दो इंटरफेस की जरूरत है। वे केवल मार्कर के रूप में काम करते हैं।
public interface SectionA{}
public interface SectionB{}
Since Spring 3.1 आप सत्यापन को गति प्रदान करने के लिए अपने नियंत्रक विधि में स्प्रिंग @Validated
एनोटेशन (@Validate
के बजाय) का उपयोग कर सकते हैं:
@RequestMapping...
public void controllerMethod(
@Validated({SectionGroupA.class}) UserInput userInput,
BindingResult binding, ...){...}
स्प्रिंग 3.1 इससे पहले कि निर्दिष्ट करने के लिए कोई रास्ता नहीं था प्रमाणीकरण समूह जिसे सत्यापन के लिए उपयोग किया जाना चाहिए (क्योंकि @Validated
मौजूद नहीं है और @Validate
में कोई समूह विशेषता नहीं है), इसलिए आपको हेक्टेयर द्वारा सत्यापन शुरू करना होगा एन लिखित कोड: यह एक उदाहरण है कि स्प्रिंग 3.0 में चुड़ैल अनुभाग पर निर्भरता में सत्यापन को ट्रिगर कैसे किया जाए।
@RequestMapping...
public void controllerMethod(UserInput userInput,...){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
List<Class<?>> groups = new ArrayList<Class<?>>();
groups.add(javax.validation.groups.Default.class); //Always validate default
if (userInput.isSectionAEnabled) {
groups.add(SectionA.class);
}
if (userInput.isSectionBEnabled) {
groups.add(SectionB.class);
}
Set<ConstraintViolation<UserInput>> validationResult =
validator.validate(userInput, groups.toArray(new Class[0]));
if(validationResult.isEmpty()) {
...
} else {
...
}
}
वास्तव में एक अच्छा सुझाव की तरह दिखता है। बस यह सोचकर कि डीटीओ में मौजूद क्षेत्रों में इसे कैसे लागू किया जाए। मेरे पास कुछ फ़ील्ड हैं जो बीन/डोमेन objecct में मौजूद नहीं हैं लेकिन डीटीओ पर मौजूद हैं और मैं उनके लिए भी सत्यापन जोड़ना चाहता हूं। – xyz
आप इस javax.validation anntoation (NotNull, ...) को बहुत कक्षा, एंटिटी डीटीओ, के क्षेत्रों पर डाल सकते हैं ... ऊपर दिए गए उदाहरण में, UserInput एक डीटीओ होना चाहिए – Ralph