सवाल HttpServletRequest - क्वेरी स्ट्रिंग पैरामीटर प्राप्त करें, कोई फॉर्म डेटा नहीं


में HttpServletRequest, getParameterMap सभी क्वेरी स्ट्रिंग पैरामीटर का मानचित्र देता है और डेटा पैरामीटर पोस्ट करता है।

क्या केवल क्वेरी स्ट्रिंग पैरामीटर का मानचित्र प्राप्त करने का कोई तरीका है? मैं getQueryString का उपयोग करके और मानों को पार्स करने से बचने की कोशिश कर रहा हूं।


50
2017-07-27 15:41


मूल


आपके पास दोनों हो सकते हैं ... आप POST अनुरोध पर क्वेरी स्ट्रिंग पैरामीटर रख सकते हैं। और उस स्थिति में, वे सभी "GetParameterMap" द्वारा लौटे हैं - JasonStoltz
ओह ठीक। किसी को सिर्फ जिज्ञासा क्यों है? - Jacob
क्योंकि परिणामी पृष्ठ पर, मैं क्वेरी स्ट्रिंग में यूआरएल / क्वेरी में एक क्वेरी स्ट्रिंग दिखाना चाहता हूं। हमारे पास एक ट्रैकिंग सिस्टम है जो क्वेरी स्ट्रिंग में विशिष्ट पैरामीटर की तलाश करता है। - JasonStoltz
। Req.getParameterMap () containsKey ( "उपयोगकर्ता नाम"); - Parag Jadhav


जवाब:


क्युलरिस ने कहा कि पैरामीटर मानचित्र में दोनों ही हो सकते हैं।

सबसे अच्छा तरीका मैं देखता हूं पैरामीटर मैप को प्रॉक्सी करना और प्रत्येक पैरामीटर पुनर्प्राप्ति जांच के लिए यदि क्वेरीस्ट्रिंग में "&? <पैरामीटर नाम> =" है।

ध्यान दें कि इस जांच से पहले पैरामीटरनाम को यूआरएल एन्कोड किया जाना चाहिए, क्योंकि क्यूरब ने बताया।

यह आपको पार्सिंग बचाता है और फिर भी आपको केवल यूआरएल पैरामीटर देता है।


19
2017-07-27 15:53



ध्यान दें कि parameterName इस चेक को बनाया जा सकता है इससे पहले यूआरएल एन्कोड किया जाना चाहिए। - qerub
क्वेरी स्ट्रिंग में कभी शामिल नहीं है ?। यह यूआरआई और क्वेरी स्ट्रिंग के बीच विभाजक चरित्र है। - BalusC
हाय @ डबलबाल्ट, मेरे पास एक ही आवश्यकता है, लेकिन आपके द्वारा प्रदान किए गए समाधान को प्राप्त नहीं किया जा सकता है। क्या आप उदाहरण कोड प्रदान कर सकते हैं? - Vishal Zanzrukia
@ विषालज़ानज़्रुकिया: आपका कोड क्या काम नहीं करता है? - DoubleMalt
मुझे विचार पसंद है, लेकिन क्वेरी स्ट्रिंग में हमेशा "=" वर्ण नहीं होता है। यदि पैरामीटर मान खाली है तो क्वेरी स्ट्रिंग में केवल <पैरामीटरनाम> है। मैं व्यक्तिगत रूप से सोचता हूं कि "&" और "=" द्वारा विभाजन एक बेहतर समाधान होगा। - Bren


आप उपयोग कर सकते हैं request.getQueryString(), अगर क्वेरी स्ट्रिंग की तरह है

username=james&password=pwd

नाम पाने के लिए आप यह कर सकते हैं

request.getParameter("username"); 

49
2018-02-12 10:14



यह गैर जावा सर्वर पृष्ठों का उपयोग करने के लिए है। - Jorgesys
दूसरा अनुरोध धारा खराब कर देगा, मुझे लगता है कि सवाल यह है कि उपयोगकर्ता नाम कैसे प्राप्त करें और बाद में प्रसंस्करण के लिए इनपुट स्ट्रीम रखें - Pavel Niedoba


सर्वलेट एपीआई में इस सुविधा की कमी है क्योंकि यह उस समय बनाया गया था जब कई लोगों का मानना ​​था कि क्वेरी स्ट्रिंग और संदेश निकाय पैरामीटर भेजने के केवल दो अलग-अलग तरीके थे, यह नहीं समझते कि पैरामीटर के उद्देश्य मौलिक रूप से अलग हैं।

क्वेरी स्ट्रिंग पैरामीटर? Foo = bar यूआरएल का एक हिस्सा है क्योंकि वे एक संसाधन की पहचान करने में शामिल हैं (जो कई संसाधनों का संग्रह हो सकता है), जैसे "42 वर्ष के सभी व्यक्ति":

प्राप्त करें / व्यक्ति? आयु = 42

POST या PUT में संदेश बॉडी पैरामीटर लक्ष्य संसाधनों में संशोधन व्यक्त करने के लिए हैं। एफएक्स विशेषता "बाल" के लिए एक मूल्य निर्धारित:

पुट / व्यक्तियों? आयु = 42

बाल = ग्रे

तो यह एक ही समय में क्वेरी पैरामीटर और बॉडी पैरामीटर दोनों का उपयोग करने के लिए निश्चित रूप से विश्वसनीय है, ताकि आप अलग-अलग उद्देश्यों के लिए उनका उपयोग कर सकें। सुविधा जावा सर्वलेट एपीआई में निश्चित रूप से गायब है।


17
2017-09-08 07:03





अन्य उत्तरों के राज्य के रूप में सर्वलेट एपीआई का उपयोग कर क्वेरी स्ट्रिंग पैरामीटर प्राप्त करने का कोई तरीका नहीं है।

इसलिए, मुझे लगता है कि क्वेरी पैरामीटर प्राप्त करने का सबसे अच्छा तरीका क्वेरी स्ट्रिंग को स्वयं पार्स कर रहा है। (पैरामीटर पर यह अधिक जटिल है और जांच कर रहा है कि क्या क्वेरी स्ट्रिंग में पैरामीटर है)

क्वेरी स्ट्रिंग पैरामीटर प्राप्त करने के लिए मैंने कोड नीचे लिखा था। Apache StringUtils और ArrayUtils का उपयोग करना।

public static Map<String, String[]> getQueryParameters(HttpServletRequest request) {
    Map<String, String[]> queryParameters = new HashMap<>();
    String queryString = request.getQueryString();

    if (StringUtils.isEmpty(queryString)) {
        return queryParameters;
    }

    String[] parameters = queryString.split("&");

    for (String parameter : parameters) {
        String[] keyValuePair = parameter.split("=");
        String[] values = queryParameters.get(keyValuePair[0]);
        values = ArrayUtils.add(values, keyValuePair.length == 1 ? "" : keyValuePair[1]); //length is one if no value is available.
        queryParameters.put(keyValuePair[0], values);
    }
    return queryParameters;
}

7
2017-08-10 20:41



मैं इसे बेहतर मानता हूं कि उत्तर स्वीकार किया गया है, पता नहीं क्यों पार्सिंग क्वेरी स्ट्रिंग से बचने के लिए है क्योंकि प्रॉक्सी बनाना बेहतर समाधान नहीं है - Pavel Niedoba
मैं बस सोच रहा हूं, अगर किसी भी क्वेरी पैरामीटर में शामिल है & इसके मूल्य में चरित्र, चाहे वह आपको सही परिणाम देगा - amdg


मुझे डर है कि पोस्ट पैरामीटर से क्वेरी स्ट्रिंग पैरामीटर अलग-अलग पार्स करने का कोई तरीका नहीं है। बीटीडब्ल्यू तथ्य यह है कि इस तरह के एपीआई अनुपस्थित का मतलब हो सकता है कि शायद आपको अपना डिज़ाइन देखना चाहिए। POST भेजते समय आप क्वेरी स्ट्रिंग का उपयोग क्यों कर रहे हैं? यदि आप वास्तव में यूआरएल उपयोग में अधिक डेटा भेजना चाहते हैं जैसे रीस्ट-जैसे सम्मेलन, उदा। भेजने के बजाय

http://mycompany.com/myapp/myservlet?first=11&second=22

कहते हैं:

http://mycompany.com/myapp/myservlet/11/22


2
2017-07-27 15:55



मैं POST में क्वेरी स्ट्रिंग पैरामीटर का उपयोग कर रहा हूं क्योंकि मैं पोस्ट के माध्यम से मूल रूप में पास किए गए किसी भी और सभी क्वेरी स्ट्रिंग को बनाए रखना चाहता हूं। यह मुख्य रूप से ट्रैकिंग उद्देश्यों के लिए है ... मुझे यकीन नहीं है कि आरईएसटी-जैसे सम्मेलन इस मामले में काम करेगा, क्योंकि मुझे पूरा यकीन है कि ट्रैकिंग लाइब्रेरी क्वेरी स्ट्रिंग में विशिष्ट पैरामीटर की तलाश में है। - JasonStoltz
विशेष रूप से कोई कारण यह है कि आप एक क्वेरी स्ट्रिंग पैरामीटर में REST- जैसे सम्मेलन का उपयोग करने की सलाह देंगे? यकीन नहीं है कि मैं समझता हूं कि लाभ क्या है? - JasonStoltz
"बीटीडब्ल्यू तथ्य यह है कि इस तरह के एपीआई अनुपस्थित का मतलब हो सकता है कि शायद आपको अपना डिज़ाइन देखना चाहिए।" इस मामले में इसका मतलब है कि ओरेकल को अपने डिजाइन की जांच करनी चाहिए :) - Stijn de Witt