संभव डुप्लिकेट:
using Hibernate Validator without calling annotation.प्रोग्रामेटिक बीन मान्यता (JSR 303) एनोटेशन बिना
मैं इस समग्र बाधा एनोटेशन (केवल व्याख्या के लिए) है:
@Target... @Retention...
@Constraint(validatedBy = {})
@Pattern(regexp = PasswordComplexity.AT_LEAST_TWO_NONE_ALPAH_CHARS)
@Length(min = 6, max = 20)
public @interface PasswordComplexity {
...
}
और मैं इसे वसंत नियंत्रकों और इकाई वर्गों में उपयोग करता हूं।
लेकिन अब मुझे एक सेवा विधि में एक स्ट्रिंग की जांच करने की आवश्यकता है, जहां मुझे एक स्ट्रिंग को एक ही बाधा लागू करने की आवश्यकता है। इस तथ्य के कारण कि बाधा एक जैसी है, मैं बाधा की एक ही परिभाषा (@PasswordComplexity) (सत्य का एकल स्रोत) का उपयोग करना चाहता हूं। की तरह कुछ:
public void createUser(UserDto userDto, String password) {
if(hasViolation(validator.validate(password,PasswordComplexity.class))) {
throw new PasswordComplexityViolationException();
} else {
…
}
}
लेकिन मैं एक नहीं एनोटेट सरल वस्तु (स्ट्रिंग) के लिए JSR 303 सत्यापनकर्ता को चलाने के लिए कैसे पता नहीं है। क्या यह कम से कम संभव है, और कैसे?
(मैं JSR 303 प्रदाता के रूप में हाइबरनेट सत्यापनकर्ता का उपयोग करें)
मैं 'सच्चाई के एकल स्रोत' से समझता हूं, जिसका अर्थ है कि आप अपनी एनोटेशन दोहराना नहीं चाहते हैं जो शायद आपके 'उपयोगकर्ता' वर्ग में 'पासवर्ड' संपत्ति/फ़ील्ड पर रखा गया है, है ना? लेकिन आपके "कुछ ऐसा" उदाहरण में आप कम से कम एनोटेशन ('passwordComplexity') का नाम दोहराते हैं। क्या यह भी एक अनावश्यकता नहीं है? –
@Grzegorz Oledzki: किसी भी समस्या को अलग-अलग स्थानों में एनोटेशन का उपयोग नहीं करना है। 'सच्चाई के एकल स्रोत' के साथ मेरा मतलब है कि मैं वही चीजें (लंबाई और पैटर्न) परिभाषा को फिर से लिखने के बजाय एनोटेशन का उपयोग करना चाहता हूं। – Ralph
@abalogh: प्रश्न एक डुप्लिकेट है (मैंने इसे ओवरलैक्ड किया है), लेकिन स्वीकार्य उत्तर प्रश्न से मेल नहीं खाता - या कम से कम मेरा प्रश्न नहीं। – Ralph