2011-05-25 12 views
19

मुझे पर हैंडलर विधि के पैरामीटर पर @Valid का उपयोग करने में कोई समस्या है। मेरे कोड इस तरह दिखता है:मैं स्प्रिंग एमवीसी के @RequestBody पैरामीटर के साथ @ वैलिड का उपयोग कैसे करूं?

@RequestMapping(value=BIBBLE_BOBBLE_URI_PATTERN + "/widgets", method=RequestMethod.POST) 
@ResponseBody 
@ResponseStatus(HttpStatus.CREATED) 
public Widget saveNewWidget(
     @PathVariable final String username, 
     @PathVariable final String bibbleBobbleName, 
     @Valid @RequestBody final Widget widget, 
     final BindingResult results, 
     final HttpServletRequest request, 
     final HttpServletResponse response) 

जहां Widget मेरे डोमेन वस्तुओं में से एक के लिए वर्ग है। मैं @RequestBody एनोटेशन का उपयोग कर रहा हूं यह इंगित करने के लिए कि अनुरोध का पेल widget पर है (मेरे परीक्षणों में, अनुरोध JSON हैं, हालांकि जैक्सन मेरे क्लासपाथ पर है इसलिए मैं एक्सएमएल का उपयोग भी कर सकता हूं)।

आप देख सकते हैं, BindingResult पैरामीटर Widget पैरामीटर के बाद सीधे इस प्रकार है, लेकिन मैं निम्नलिखित त्रुटि मिलती है:

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature! 

कैसे मैं एक @RequestBody पैरामीटर के लिए @Valid एनोटेशन लागू होते हैं और उसके बाद परिणाम प्राप्त?

पीएस मैं नियंत्रकों को तारों को संभालने के लिए annotation-driven का उपयोग कर रहा हूं, सामग्री-बातचीत करता हूं, आदि

+0

मैं यह सब अभी भी सीख रहा हूं, ** लेकिन **, विशेषता '_ModelAttribute ("xyz") विजेट विजेट नामकरण करने का प्रयास करें। –

+0

@DecaniBass यह उस समस्या का समाधान करेगा जो किसी भी डेटा को बाध्यकारी नहीं करता है जिसे मैंने @ शिल्पकार के उत्तर पर मेरी टिप्पणी में उल्लेख किया है? –

+0

मुझे यह एक पुराना पोस्ट पता है, लेकिन क्या यह आपके लिए काम कर रहा है? मैं वसंत 3.2 का उपयोग कर रहा हूँ। बाध्यकारी काम, लेकिन @Valid नहीं। प्रश्न यहां पोस्ट किया गया [http://stackoverflow.com/q/16174990/668650] –

उत्तर

9

क्या आप स्प्रिंग 3.1 का उपयोग कर रहे हैं? यह वसंत संस्करण 3.1 में एक नई जोड़ा सुविधा है। कृपया Validation For @RequestBody Method Arguments

+0

से पैरामीटर '' 'अंतिम बाध्यकारी परिणाम परिणाम,' 'हटाएं, यह वास्तव में स्वागत समाचार है, लेकिन मैं 3.0.5 पर अटक गया हूं कम से कम 3.1 तक अंतिम हो जाता है। सूचक के लिए धन्यवाद, यद्यपि। –

+0

3.1 अब जंगली में अंतिम/जारी/बाहर है। :) – finneycanhelp

+3

मैंने 3.1 में यह कोशिश की और मुझे अभी भी यह समस्या मिल गई है। – finneycanhelp

2

यह वसंत 3.0 में एक समस्या है और यह 3.1 एम 2 में तय है।

https://jira.springsource.org/browse/SPR-6709

आप कुछ धागे और व्यापक पढ़ने के आधार पर, वसंत 3.0 का उपयोग कर रहे हैं, तो यहाँ इस समस्या के लिए सबसे अच्छा तरीका है। एक पहलू उन्मुख दृष्टिकोण ताकि हम इसे वसंत के संस्करण में अपग्रेड करते समय वापस कर सकें जो इस समस्या को हल करता है।

एक पहलू जो विधि को कॉल करता है जो @RequestMapping एनोटेशन का उपयोग करता है और प्रत्येक पैरामीटर के लिए @Valid एनोटेशन है, पहलू में संबंधित सत्यापनकर्ता को कॉल करें।

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