आप स्प्रिंग कंट्रोलर मैपिंग के साथ एक url पैरामीटर कैसे प्राप्त करते हैं


96

यह समस्या तुच्छ लगती है, लेकिन मैं इसे ठीक से काम नहीं कर सकता। मैं अपने स्प्रिंग कंट्रोलर को jquery ajax के साथ मैप कर रहा हूं। SomeAttr का मान हमेशा url में मान की परवाह किए बिना रिक्त स्ट्रिंग होता है। कृपया मुझे यह निर्धारित करने में मदद करें कि क्यों।

-यूआरएल को बुलाया

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6

-कंट्रोलर मैपिंग

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET)
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
        @ModelAttribute(value="someAttr") String someAttr) {
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string.  The value for id is correctly set to "1".
}

जवाबों:


157

आपको @RequestParamइसके बजाय का उपयोग करना चाहिए @ModelAttribute, जैसे

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 @RequestParam String someAttr) {
}

@RequestParamयदि आप चुनते हैं तो आप पूरी तरह से छोड़ सकते हैं, और वसंत मान लेंगे कि यह क्या है:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}

22

आपके पास @RequestParamअतिरिक्त वैकल्पिक तत्वों के साथ उपयोग करने के लिए कई प्रकार हैं, जैसे

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr

यदि आप नहीं डालते हैं required = false- तो डिफ़ॉल्ट रूप से परम की आवश्यकता होगी।

defaultValue = "someValue" - जब अनुरोध पैरामीटर प्रदान नहीं किया जाता है या खाली मान होता है, तो फ़ॉलबैक के रूप में उपयोग करने के लिए डिफ़ॉल्ट मान।

यदि अनुरोध और विधि परम समान हैं - तो आपको इसकी आवश्यकता नहीं है value = "someAttr"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.