विशेष वर्णों को संभालने के दौरान @RequestParam
और @PathVariable
के बीच क्या अंतर है? +
को स्पेस के रूप में @RequestParam
द्वारा स्वीकार किया गया था। @PathVariable
के मामले में, +
को +
के रूप में स्वीकार किया गया था।@RequestParam बनाम @PathVariable
उत्तर
@PathVariable
uri से कुछ प्लेसहोल्डर प्राप्त करने के लिए (वसंत यह एक यूआरआई खाका कहते हैं) है - देख Spring Reference Chapter 16.3.2.2 URI Template Patterns@RequestParam
एक पैरामीटर प्राप्त करने के लिए है - Spring Reference Chapter 16.3.3.3 Binding request parameters to method parameters with @RequestParam
देख यूआरएल http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
हो जाता है 5 दिसंबर, 2013 को उपयोगकर्ता 1234 के लिए चालान, नियंत्रक विधि इस तरह दिखेगी:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
इसके अलावा, अनुरोध पैरामीटर वैकल्पिक हो सकते हैं, लेकिन पथ चर नहीं कर सकते - अगर वे थे, तो यह यूआरएल पथ पदानुक्रम बदल देगा और अनुरोध मैपिंग संघर्ष पेश करेगा। उदाहरण के लिए, /user/invoices
उपयोगकर्ता null
के लिए चालान या आईडी "चालान" वाले उपयोगकर्ता के बारे में विवरण प्रदान करेगा?
यह हो सकता है कि आवेदन/x-www फार्म-urlencoded + को Midia प्रकार परिवर्तित अंतरिक्ष, और रिसीवर + परिवर्तित अधिक जानकारी के लिए यूआरएल space.check करने से डेटा को डिकोड होगा। http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
@RequestParam एनोटेशन अनुरोध से क्वेरी पैरामीटर मानों तक पहुंचने के लिए उपयोग किया गया। निम्नलिखित अनुरोध URL को देखो:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
ऊपर URL अनुरोध में, param1 और param2 के लिए मूल्यों नीचे के रूप में पहुँचा जा सकता है:
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
निम्नलिखित द्वारा समर्थित मानकों की सूची इस प्रकार @ RequestParam एनोटेशन:
- DefaultValue - यह एक fallback तंत्र के रूप में डिफ़ॉल्ट मान है यदि अनुरोध मूल्य होने नहीं है या यह रिक्त है ।
- नाम - पैरामीटर के नाम बाध्य करने के लिए
- आवश्यक - चाहे पैरामीटर अनिवार्य है या नहीं। यदि यह सत्य है, तो उस पैरामीटर को भेजने में असफल हो जायेगा।
- मूल्य - यह नाम के लिए एक उपनाम का श्रेय
@PathVariable
@PathVariable पैटर्न है कि आने वाली अनुरोध के लिए यूआरआइ में प्रयोग किया जाता है की पहचान करता है।के नीचे अनुरोध URL पर नजर डालते हैं:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
ऊपर URL अनुरोध नीचे के रूप में अपने स्प्रिंग MVC में लिखा जा सकता है:
@RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
@PathVariable एनोटेशन केवल अनुरोध यूआरआई टेम्पलेट बाध्य करने के लिए एक विशेषता मूल्य। इसे एकल विधि में एकाधिक @PathVariable एनोटेशन का उपयोग करने की अनुमति है। लेकिन, सुनिश्चित करें कि एक से अधिक तरीकों में एक ही पैटर्न नहीं है। @MatrixVariable
और यह
@RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {
logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });
List<List<String>> outlist = map2List(matrixVars);
model.addAttribute("stocks", outlist);
return "stocks";
}
लेकिन आप सक्षम करना होगा के लिए नियंत्रक विधि:
इसके अलावा वहाँ एक और अधिक दिलचस्प टिप्पणी है
<mvc:annotation-driven enableMatrixVariables="true" >
क्या कोई स्ट्रिंग, जैसे 'userName' में एक प्रकार है परम या नहीं? मैं इसे एक चर बनाने की ओर झुका रहा हूं, लेकिन यह भी एक param हो सकता है। – cst1992
.. और यहां मूल पोस्ट है: - http://javabeat.net/spring-mvc-requestparam-pathvariable/ –
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
http://localhost:8080/employee/call/7865467
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = false) String callStatus) {
}
http://localhost:8080/app/call/7865467?status=Cancelled
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = true) String callStatus) {
}
क्या पोस्ट अनुरोध के साथ @pathVariable काम कर सकते हैं? – ishanbakshi
'@ PathVariable' किसी भी अनुरोध विधि –
में उपयोग किया जा सकता है एक बहुत अच्छा उदाहरण। – Sid