2013-02-15 38 views
7
में कनवर्ट JSR-303 सत्यापन त्रुटियों

मैं वसंत नियंत्रक में निम्न कोड है:वसंत के BindingResult

@Autowired 
private javax.validation.Validator validator; 

@RequestMapping(value = "/submit", method = RequestMethod.POST) 
public String submitForm(CustomForm form) { 
    Set<ConstraintViolation<CustomForm>> errors = validator.validate(vustomForm); 
    ... 
} 

यह संभव मैन्युअल रूप से सभी त्रुटियों के माध्यम से जा रहा है और उन्हें जोड़ने के बिना स्प्रिंग के BindingResult वस्तु को errors मैप करने के लिए है BindingResult? कुछ इस तरह:

// NOTE: this is imaginary code 
BindingResult bindingResult = BindingResult.fromConstraintViolations(errors); 

मैं अब यह @Valid साथ CustomForm पैरामीटर व्याख्या और स्प्रिंग किसी अन्य विधि के पैरामीटर के रूप में इंजेक्षन BindingResult जाने के लिए संभव है, लेकिन यह मेरे मामले में एक विकल्प नहीं है।

// I know this is possible, but doesn't work for me 
public String submitForm(@Valid CustomForm form, BindingResult bindingResult) { 
    ... 
} 

उत्तर

8

एक सरल तरीका बजाय वसंत के अमूर्त org.springframework.validation.Validator उपयोग करने के लिए हो सकता है, आप संदर्भ में इस सेम होने से एक सत्यापनकर्ता की पकड़ प्राप्त कर सकते हैं:

<bean id="jsr303Validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

@Autowired @Qualifier("jsr303Validator") Validator validator; 

स्थान पर इस अमूर्त के साथ, आप उपयोग कर सकते हैं सत्यापनकर्ता इस तरह से, अपने bindingResult में गुजर:

validator.validate(obj, bindingResult); 
+0

धन्यवाद! यह निश्चित रूप से अधिक संक्षिप्त है। –

+3

मुझे विधि सत्यापित नहीं है जो BindingResult – gstackoverflow

+1

स्वीकार करता है यदि आपको बाध्यकारी परिणामों को स्वीकार करने वाली वैध विधि नहीं दिखाई देती है, तो इसका मतलब है कि आपका वैलिडेटर सत्यापनकर्ता एक javax.validation.Validator है। इसे org.springframework.validation.Validator में बदलें और आप ठीक होंगे। बीन परिभाषा को बदलने की जरूरत नहीं है। – Icegras

0

स्प्रिंग एक SpringValidatorAdapter का उपयोग करता है करने के लिए javax.validation.ConstraintViolation वस्तुओं कन्वर्ट करने के लिए बाध्यकारी परिणाम में पाए गए ऑब्जेक्ट एरर या फील्ड एरर ऑब्जेक्ट्स। बिंदस्टैटस त्रुटियों का अनुवाद करने के लिए फिर एक संदेश स्रोत (जैसे वेब अनुप्रयोग संदर्भ स्वयं) का उपयोग करता है। संक्षेप में, आप कर सकता है:

SpringValidatorAdapter springValidator = new SpringValidatorAdapter(validator); 
BindingResult bindingResult= new BeanPropertyBindingResult(myBeanToValidate, "myBeanName"); 
springValidator.validate(myBeanToValidate, bindingResult); 

यह जब एक इकाई परीक्षण लेखन, क्योंकि आप भी एक स्प्रिंग संदर्भ बनाने के लिए की जरूरत नहीं है आसान है।