2011-04-02 19 views
5

सक्षम मैं सर्वर के लिए भेजा PUT अनुरोध पर कब्जा करने के साथ एक समस्या मिला है।स्प्रिंग फ्रेमवर्क, PUT विधि

ये मेरी तरीके हैं:

@RequestMapping(method= RequestMethod.GET) 
public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
} 


@RequestMapping(method= RequestMethod.PUT) 
public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("put request"); 
    return "index"; 
} 

जब मैं कॉल का पता लगाया है, मेरे PUT अनुरोध को GET विधि द्वारा और PUT विधि से नहीं मेरी कक्षा .. में बाहर स्क्रीन पर संचालित किया गया है, यह हमेशा के रूप में पढ़ा "मिल निवेदन"। मैंने ब्राउज़र लॉग की जांच की है और पुष्टि करता है कि उन्होंने सही PUT अनुरोध भेजा है, इसलिए मुझे लगता है कि मैंने यहां कुछ वसंत कॉन्फ़िगरेशन को याद किया है, लेकिन मुझे नहीं पता कि यह क्या है ..

क्या कोई मदद कर सकता है?

धन्यवाद।

संपादित करें: वर्ग के साथ अतिरिक्त कोड:

@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(value="/foo1", method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("get request"); 
     return "index"; 
    } 

    @RequestMapping(value="/foo2", method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("put request"); 
     return "index"; 
    } 
} 

EDIT2: क्षमा करें, ऐसा लगता है मैं बहुत ही गहन जब लॉग की जांच .. मैं इस चेतावनी में दो बार पकड़ा नहीं किया।

WARNING: Error in annotation processing: java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

किसी भी विचार है कि कैसे ठीक करने के लिए?

+0

तो 'getCity' लागू की जा रही है, तो अनुरोध एक' GET' विधि है पर जांच करने के लिए। कोई अतिरिक्त कॉन्फ़िगरेशन आवश्यक नहीं है, आपको गलत प्रकार का अनुरोध भेजना होगा। क्या आप सुनिश्चित हैं कि आपका ग्राहक सही काम कर रहा है? – skaffman

+0

हाँ .. मुझे यकीन है कि ग्राहक सही काम कर रहा था। यह कंसोल में लॉग इन किया जा रहा था। क्रोम और फ़ायरफ़ॉक्स के साथ प्रयास किया, और दोनों ने पुट अनुरोध भेजा। – Magician

+0

'getCity' के लिए एक' HttpServletRequest' पैरामीटर जोड़ें, तो लॉग ऑन 'request.getMethod()', और देखो क्या है कि कहते हैं। – skaffman

उत्तर

3

यह समाधान हो जाता है ... इस संशोधित विधि है कि काम करता है

 
@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
    } 

    @RequestMapping(method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestBody CityData state, Model model) { 
    System.out.println(state.getState()); 
    return "index"; 
    } 
} 
 
public class CityData { 
    private String state; 
    public String getState() { 
    return this.state; 
    } 
    public void setState(String state) { 
    this.state = state; 
    } 
} 

आप @RequestBody String state इस्तेमाल कर सकते हैं, लेकिन मैं केवल CityData वस्तु बनाने के लिए क्योंकि नमूना ऊपर मेरी कोड का अति सरलीकरण है पसंद करते हैं, डेटा को संभालने के लिए कैसे

1

यह तथ्य यह है कि आप एक मानचित्रण मूल्य निर्दिष्ट नहीं किया है के साथ क्या करने के लिए कुछ हो सकता है। @RequestMapping(value="/foo", ...GET) और @RequestMapping(value="/foo", ...PUT) क्रमशः

प्रलेखन लिखते का प्रयास करें:

आप एक ही डिफ़ॉल्ट विधि (स्पष्ट पथ मानचित्रण के बिना) है, तो एक अधिक विशिष्ट मैप किया पाया विधि के बिना सभी अनुरोधों को यह करने के लिए भेजा जाएगा। यदि आपके पास ऐसी कई डिफ़ॉल्ट विधियां हैं, तो उनके बीच चयन करने के लिए विधि का नाम ध्यान में रखा जाएगा।

त्रुटि के बारे में - आपको अपने क्लासपाथ में औपचारिक जार जोड़ने की आवश्यकता है।

+0

मैंने केवल कक्षा स्तर पर मैपिंग को परिभाषित किया। विधि अनुरोधों को संभालेगी। – Magician

+0

@ रुडी दाजोह अच्छी तरह से कोशिश करें - यह चुनने के लिए एक समस्या हो सकती है कि कौन सी विधि का आह्वान करना है। – Bozho

+0

ठीक है, मैंने इसका परीक्षण '@ RequestParam' का उपयोग करके किया है, जिसे इस्तेमाल किया जा रहा है, वह प्राप्त किया गया था, जबकि सभी पैरामीटर को हटाते समय सही ढंग से पैरामीटर को पैरामीटर के बिना बुलाया जाएगा। हालांकि मैं HttpServletRequest का उपयोग कर पैरामीटर कैप्चर नहीं कर सकता। मैंने अभी @ 'RequestParam' का उपयोग करके एक 'अमान्य अनुरोध' त्रुटि देखी है, जो कि कारण हो सकता है कि क्यों डाल दिया गया है और इसके बजाय getCity का आह्वान किया गया है, और यहां मुख्य समस्या हो सकती है क्योंकि जावा अनुरोध से किसी भी पैरामीटर को पुनर्प्राप्त नहीं कर सका। मैंने डेटा को कैप्चर करने के लिए आरओआर के साथ प्रयास किया है, और आरओआर को अपना सभी फॉर्म डेटा सही ढंग से प्राप्त हो सकता है। तो, मुझे यकीन है कि समस्या जावा में निहित है। – Magician

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