मैं स्प्रिंग बूट में क्वेरी पैरामीटर कैसे प्राप्त करूं?


122

मैं स्प्रिंग बूट का उपयोग करके एक परियोजना विकसित कर रहा हूं। मेरे पास एक नियंत्रक है जो GET अनुरोध स्वीकार करता है।

वर्तमान में मैं निम्नलिखित प्रकार के URL के अनुरोध स्वीकार कर रहा हूं:

http: // localhost: 8888 / उपयोगकर्ता / डाटा / 002

लेकिन मैं क्वेरी मापदंडों का उपयोग करके अनुरोध स्वीकार करना चाहता हूं :

http: // localhost: 8888 / उपयोगकर्ता डेटा = 002

यहाँ मेरे नियंत्रक का कोड है:

@RequestMapping(value="/data/{itemid}", method = RequestMethod.GET)
public @ResponseBody
item getitem(@PathVariable("itemid") String itemid) {   
    item i = itemDao.findOne(itemid);              
    String itemname = i.getItemname();
    String price = i.getPrice();
    return i;
}

7
@RequestParam(अच्छा प्रारंभिक बिंदु: आधिकारिक मार्गदर्शिका )
क्राइगर

जवाबों:


197

@RequestParam का उपयोग करें

@RequestMapping(value="user", method = RequestMethod.GET)
public @ResponseBody Item getItem(@RequestParam("data") String itemid){

    Item i = itemDao.findOne(itemid);              
    String itemName = i.getItemName();
    String price = i.getPrice();
    return i;
}

1
तो इस विधि का URL क्या है आप बता सकते हैं? मुझे क्या बदलना चाहिए
मेहँदी हसन

क्षमा करें, यह URL लोकलहोस्ट काम नहीं कर रहा है: 8888 / उपयोगकर्ता; डेटा = 001 मैंने इस URL में प्रवेश किया है
मेहँदी हसन

3
मान मैपिंग एनोटेशन से मान = "/" निकालें । Btw यह वास्तव में गरीब डिजाइन है। यदि आप किसी उपयोगकर्ता के लिए किसी आइटम का उपयोग करने जा रहे हैं तो बाकी तरीका उपयोगकर्ता / आइटम / {itemId} होगा
विगत

18
का उपयोग करते हुए @RequestParam के रूप में public @ResponseBody item getitem(@RequestParam("data") String itemid){की आवश्यकता है डेटा क्वेरी पैरामीटर हमेशा उपस्थित रहने की। इसके बजाय यदि आप इसे इस तरह से उपयोग करते हैं public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, तो यह डेटा को वैकल्पिक बनाता है
संसारि

3
... मुझे सवाल के नीचे एक टिप्पणी छोड़ने के बजाय एक उत्तर पोस्ट करना चाहिए था! : -ओ
क्राइगर

9

हालांकि @RequestParam, उपयोग के संदर्भ में स्वीकार किए गए उत्तर का उपयोग करने के मामले में बिल्कुल सही है , मैं आगे एक वैकल्पिक <> का उपयोग करने का सुझाव दूंगा क्योंकि आप हमेशा यह सुनिश्चित नहीं कर सकते कि सही पैरामीटर का उपयोग किया जाता है। इसके अलावा, यदि आपको एक इंटेगर या लॉन्ग की जरूरत है, तो उस डेटा प्रकार का उपयोग कास्टिंग प्रकार से बचने के लिए बाद में DAO में करें।

@RequestMapping(value="/data", method = RequestMethod.GET)
public @ResponseBody
Item getItem(@RequestParam("itemid") Optional<Integer> itemid) { 
    if( itemid.isPresent()){
         Item i = itemDao.findOne(itemid.get());              
         return i;
     } else ....
}

आपको वैकल्पिक कहां से मिला?
जॉय गफ

1
@JoeyGough जावा 8 में शुरू किया गया। docs.oracle.com/javase/8/docs/api/java/util/Optional.html
एंड्रयू

2

स्प्रिंग बूट में: 2.1.6, आप नीचे की तरह उपयोग कर सकते हैं:

    @GetMapping("/orders")
    @ApiOperation(value = "retrieve orders", response = OrderResponse.class, responseContainer = "List")
    public List<OrderResponse> getOrders(
            @RequestParam(value = "creationDateTimeFrom", required = true) String creationDateTimeFrom,
            @RequestParam(value = "creationDateTimeTo", required = true) String creationDateTimeTo,
            @RequestParam(value = "location_id", required = true) String location_id) {

        // TODO...

        return response;

@ApiOperation एक एनोटेशन है जो स्वैगर आपी से आता है, इसका उपयोग एप्स को प्रलेखित करने के लिए किया जाता है।


required = trueडिफ़ॉल्ट रूप से
DV82XL

0

मुझे इसमें भी रूचि थी और स्प्रिंग बूट साइट पर कुछ उदाहरणों के बारे में बताया।

   // get with query string parameters e.g. /system/resource?id="rtze1cd2"&person="sam smith" 
// so below the first query parameter id is the variable and name is the variable
// id is shown below as a RequestParam
    @GetMapping("/system/resource")
    // this is for swagger docs
    @ApiOperation(value = "Get the resource identified by id and person")
    ResponseEntity<?> getSomeResourceWithParameters(@RequestParam String id, @RequestParam("person") String name) {

        InterestingResource resource = getMyInterestingResourc(id, name);
        logger.info("Request to get an id of "+id+" with a name of person: "+name);

        return new ResponseEntity<Object>(resource, HttpStatus.OK);
    }

यहां भी देखें

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