विशेष पात्रों को संभालने के दौरान @RequestParam
और अंतर क्या है @PathVariable
?
+
@RequestParam
अंतरिक्ष के रूप में स्वीकार किया गया था ।
के मामले में @PathVariable
, +
के रूप में स्वीकार कर लिया गया +
।
विशेष पात्रों को संभालने के दौरान @RequestParam
और अंतर क्या है @PathVariable
?
+
@RequestParam
अंतरिक्ष के रूप में स्वीकार किया गया था ।
के मामले में @PathVariable
, +
के रूप में स्वीकार कर लिया गया +
।
जवाबों:
@PathVariable
यूआरआई से कुछ प्लेसहोल्डर को प्राप्त करना है (स्प्रिंग इसे यूआरआई टेम्प्लेट कहते हैं) - स्प्रिंग संदर्भ अध्याय 16.3.2.2 यूआरआई टेम्प्लेट देखें@RequestParam
यूआरआई से एक पैरामीटर भी प्राप्त करना है - स्प्रिंग रेफरेंस चैप्टर 16.3.3.3 को देखें।यदि http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
5 दिसंबर, 2013 को उपयोगकर्ता 1234 के लिए URL प्राप्त करता है, तो नियंत्रक विधि इस प्रकार दिखाई देगी:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
इसके अलावा, अनुरोध पैरामीटर वैकल्पिक हो सकते हैं, और स्प्रिंग 4.3.3 पथ चर भी वैकल्पिक हो सकते हैं । हालांकि सावधान रहें, यह URL पथ पदानुक्रम को बदल सकता है और अनुरोध मानचित्रण संघर्षों को प्रस्तुत कर सकता है। उदाहरण के लिए, क्या /user/invoices
उपयोगकर्ता के लिए इनवॉइस प्रदान करेगा null
या ID "इनवॉइस" वाले उपयोगकर्ता के बारे में विवरण देगा?
@PathParam
केवल तभी काम करता है, जब यूआरआई टेम्पलेट में एक प्लेसहोल्डर हो)
@PathParam
एक javax.ws.rs एनोटेशन है। docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.html
@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 एनोटेशन द्वारा समर्थित मापदंडों की सूची निम्नलिखित हैं:
@PathVariable
@ PathVariable आने वाले अनुरोध के लिए URI में उपयोग किए जाने वाले पैटर्न की पहचान करता है। आइए नीचे दिए गए अनुरोध URL को देखें:
http: // localhost: 8080 / springmvc / हैलो / 101 param1 = 10 & param2 = 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 एनोटेशन अनुरोध URI टेम्पलेट को बाइंड करने के लिए केवल एक विशेषता मान है। इसे एकल विधि में कई @ 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
एक प्रकार का परम है या नहीं? मैं इसे परिवर्तनशील बनाने की ओर झुक रहा हूं, लेकिन यह एक परम भी हो सकता है।
@PathParam
और @RequestParam
बिना का उपयोग कर घोषित किया@RequestMapping
@RequestParam का उपयोग क्वेरी पैरामीटर (स्थिर मान) के लिए किया जाता है जैसे: http: // localhost: 8080 / गणना / pow? Base = 2 और ext = 4
@PathVariable गतिशील मानों के लिए उपयोग किया जाता है जैसे: http: // localhost: 8080 / गणना / sqrt / 8
@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
int pow = (int) Math.pow(base1, ext1);
return pow;
}
@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
double sqrtnum=Math.sqrt(num1);
return sqrtnum;
}
1) क्वेरी पैरामीटर@RequestParam
निकालने के लिए उपयोग किया जाता है
http://localhost:3000/api/group/test?id=4
@GetMapping("/group/test")
public ResponseEntity<?> test(@RequestParam Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
जबकि @PathVariable
URI से डेटा निकालने सही करने के लिए प्रयोग किया जाता है:
http://localhost:3000/api/group/test/4
@GetMapping("/group/test/{id}")
public ResponseEntity<?> test(@PathVariable Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
2) @RequestParam
एक पारंपरिक वेब एप्लिकेशन पर अधिक उपयोगी है जहां डेटा ज्यादातर क्वेरी मापदंडों में पारित किया जाता है@PathVariable
Restful वेब सेवाओं के लिए अधिक उपयुक्त होता है जहां URL का मान होता है।
3) @RequestParam
एनोटेशन डिफ़ॉल्ट मान निर्दिष्ट कर सकता है यदि कोई क्वेरी पैरामीटर मौजूद नहीं है या किसी defaultValue
विशेषता का उपयोग करके खाली है , बशर्ते आवश्यक विशेषता है false
:
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = "/name")
String getName(@RequestParam(value = "person", defaultValue = "John") String personName) {
return "Required element of request param";
}
}
@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) {
}
दोनों एनोटेशन एक ही तरीके से व्यवहार करते हैं।
केवल 2 विशेष वर्ण! ' और '@' एनोटेशन @PathVariable और @RequestParam द्वारा स्वीकार किए जाते हैं।
व्यवहार की जांच करने और पुष्टि करने के लिए मैंने एक स्प्रिंग बूट एप्लिकेशन बनाया है जिसमें केवल 1 नियंत्रक है।
@RestController
public class Controller
{
@GetMapping("/pvar/{pdata}")
public @ResponseBody String testPathVariable(@PathVariable(name="pdata") String pathdata)
{
return pathdata;
}
@GetMapping("/rpvar")
public @ResponseBody String testRequestParam(@RequestParam("param") String paramdata)
{
return paramdata;
}
}
अनुरोधों का पालन करते हुए मुझे वही प्रतिक्रिया मिली:
! @ दोनों अनुरोधों में प्रतिक्रिया के रूप में प्राप्त किया गया था
यह हो सकता है कि एप्लिकेशन / x-www-form-urlencoded midia प्रकार स्थान को + में कनवर्ट करें , और अधिक जानकारी के लिए url + को अंतरिक्ष में परिवर्तित करके डेटा रिकवर करेगा। http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
@PathVariable
किसी भी RequestMethod