2011-02-04 16 views
8

का उपयोग कर जेएसआर 303 बीन सत्यापन को सक्षम करने का एक मानक तरीका है, मैं अब कुछ समय के लिए चारों ओर देख रहा हूं। मैं नहीं स्प्रिंग एमवीसी का उपयोग कर रहा हूं लेकिन अभी भी विधि तर्कों के सत्यापन को सक्षम करने के लिए @javax.validation.Valid का उपयोग करना चाहता हूं। एक उदाहरणएनोटेटेड विधि तर्क

public class EventServiceImpl implements IEventService { 
    @Override 
    public void invite(@Valid Event event, @Valid User user) { ... } 
} 

MVC का उपयोग कर सकें, इसलिए इस (5.7.4.3 Configuring a JSR-303 Validator for use by Spring MVC देखें) एक सरल <mvc:annotation-driven/> साथ @Controller एनोटेट सेम के लिए सक्षम है।

एओपी का उपयोग करना काफी छोटा होना चाहिए। फिर भी, मुझे संदेह है कि ऐसा करने के लिए कुछ मानक तरीका है। इसलिए सवाल: क्या गैर-एमवीसी अनुप्रयोगों और गैर नियंत्रक सेम के लिए एनोटेटेड सेम के लिए इनपुट सत्यापन सक्षम करने के लिए एक समान बात है?

उत्तर

6

विधि स्तर सत्यापन बीन सत्यापन विनिर्देश (जेएसआर 303) का हिस्सा नहीं है। विधि स्तर सत्यापन appendix C में जोड़े गए spec में एक सुझाव है।

हाइबरनेट वैलिडेटर 4.2 (बीटा पहले से बाहर है) इस सुझाव को कार्यान्वित कर रहा है और विधि पैरामीटर पर जेएसआर 303 एनोटेशन और मूल्यों को वापस करने की अनुमति देता है। बेशक आपको अभी भी कुछ स्प्रिंग गोंद कोड की आवश्यकता होगी, लेकिन यह बहुत कठिन नहीं होना चाहिए।

इसके अलावा बीन सत्यापन 1.1 आधिकारिक रूप से spec (विधि के रूप में परिशिष्ट/अनुशंसा) के लिए विधि स्तर सत्यापन जोड़ देगा। यह भी देखें http://beanvalidation.org/

3

MVC का उपयोग करना, इस @Controller एनोटेट सेम

@Valid नियंत्रक सेम में सिर्फ एक मार्कर है कि कोड है कि सत्यापन करता है और एक अच्छा में Errors में सभी बाधा उल्लंघन डालता छुपाता है के लिए सक्षम किया गया है मार्ग। स्प्रिंग डिजाइनर एक ही काम करने के लिए अपनी खुद की एनोटेशन का आविष्कार कर सकते थे।

@ वैलिड एनोटेशन का असली उपयोग कक्षा (बीन) में है कि आप जेएसआर 303 सत्यापनकर्ता के साथ मान्य हैं और इसका प्राथमिक उपयोग ऑब्जेक्ट ग्राफ़ को सत्यापित करना है। मतलब है कि एक बीन में अन्य @Valid एनोटेशन के साथ बीन संदर्भों को फिर से सत्यापन ट्रिगर करने के लिए हो सकता है।

MVC बाहर, आप किसी भी सेम JSR 303 एनोटेशन का उपयोग करता है को मान्य करने के लिए कॉन्फ़िगर सत्यापनकर्ता उपयोग कर सकते हैं लेकिन, के विपरीत अच्छी तरह से नियंत्रक में Errors आबादी, आप अपने आप को तय करने के लिए आप बाधा के उल्लंघन के साथ क्या करने जा रहे हैं होगा।

तो, अपने प्रश्न का उत्तर देने के लिए, कोई मानक तरीका नहीं है। एक नियंत्रक के समान दिखने के लिए, आप एक बीन को सत्यापित करने के लिए एओपी सलाह चलाने के लिए @Valid एनोटेशन (या एक नया निर्माण) का उपयोग कर सकते हैं और 'उल्लंघन उल्लंघनकर्ता' (एमवीसी में त्रुटियों की तरह कुछ) को पॉप्युलेट कर सकते हैं जिसे एक को पास किया जाना चाहिए तरीका।

संबंधित मुद्दे