2013-03-04 7 views
5

के रूप में मैं एक GET अनुरोध Suh के रूप में अपने सर्वर के लिए सक्षम पास होना चाहते हैं पाने के लिए कैसे:क्वेरी परम HashMap

http://example.com/?a[foo]=1&a[bar]=15&b=3 

और जब मैं क्वेरी परम 'एक', ऐसा HashMap के रूप में पार्स किया जाना चाहिए मिल इसलिए:

{'foo':1, 'bar':15} 

संपादित करें: ठीक है, स्पष्ट होना, यहाँ मैं क्या करने की कोशिश कर रहा हूँ, लेकिन जावा में, पीएचपी के बजाय:

Pass array with keys via HTTP GET

कोई भी विचार कैसे यह पूरा करने के?

उत्तर

1

कि करने के लिए कोई मानक तरीका नहीं है।

विंक javax.ws.rs.core.MultivaluedMap का समर्थन करता है। तो अगर आप http://example.com/?a=1&a=15&b=3 की तरह कुछ भेज तो आपको मिलेंगे: कुंजी a मान 1, 15, कुंजी b मूल्य 3.

यदि आपको ?a[1]=1&a[gv]=15&b=3 जैसे कुछ को पार्स करने की आवश्यकता है तो आपको javax.ws.rs.core.MultivaluedMap.entrySet() लेने और चाबियों का एक अतिरिक्त पार्सिंग करने की आवश्यकता है।

यहाँ कोड के उदाहरण आप उपयोग कर सकते हैं (यह परीक्षण नहीं किया है, तो यह कुछ मामूली त्रुटियां हो सकती हैं):

String getArrayParameter(String key, String index, MultivaluedMap<String, String> queryParameters) { 
    for (Entry<String, List<String>> entry : queryParameters.entrySet()) { 
     String qKey = entry.getKey(); 
     int a = qKey.indexOf('['); 
     if (a < 0) { 
      // not an array parameter 
      continue; 
     } 
     int b = qKey.indexOf(']'); 
     if (b <= a) { 
      // not an array parameter 
      continue; 
     } 
     if (qKey.substring(0, a).equals(key)) { 
      if (qKey.substring(a + 1, b).equals(index)) { 
       return entry.getValue().get(0); 
      } 
     } 
    } 
    return null; 
} 

अपने संसाधन में आप इसे इस तरह बुलाना चाहिए:

@GET 
public void getResource(@Context UriInfo uriInfo) { 
    MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters(); 
    getArrayParameter("a", "foo", queryParameters); 
} 
+0

यह वही नहीं है जो मैं चाहता हूं, क्योंकि चाबियाँ भी मेरे लिए महत्वपूर्ण हैं। तो जब मैं 'एक' मिलता है, मैं चाहता हूँ करने के लिए इसे होने की मूल्य है: { '1': 1, 'जीवी': 1} – Martin

+0

आपका प्रस्तावित प्रारूप सामान्य प्रश्न नहीं है प्रारूप पैरामीटर: यदि आप सूचकांक के साथ कुंजी नाम मिला दें। वैसे भी आप मानचित्र से keySet() प्राप्त कर सकते हैं और इसे स्वयं पार्स कर सकते हैं। – Tarlog

+0

यह प्रारंभिक विचार था - वहाँ कुछ है जो मैं पर यह पार्स करने के बजाय का उपयोग कर सकते है अपने ही :) – Martin

1

आप जेएसओएन ऑब्जेक्ट को स्ट्रिंग के रूप में यूआरएल में जोड़कर पास कर सकते हैं। लेकिन befor यह सांकेतिक शब्दों में बदलना करने के लिए कि आप की आवश्यकता आप विधि इस लिंक http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_encodingUtil.htm एन्कोडिंग के लिए और उसके बाद में दिए गए का उपयोग किसी भी अन्य स्ट्रिंग

+0

मेरी समस्या यूआरएल का निर्माण नहीं कर रही है, लेकिन इसे पार्स कर रही है। – Martin

+0

आप Google से जीएसओएन जैसे किसी भी जेसन पार्सर का उपयोग कर सकते हैं ... –

0

वैकल्पिक रूप json वस्तु संलग्न अगर आप HttpServletRequest उपयोग कर रहे हैं तो आप getParameterMap उपयोग कर सकते हैं कर सकते हैं() विधि जो आपको सभी पैरामीटर और उसके मानों को मानचित्र के रूप में देती है।

उदा।

public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws IOException { 

    System.out.println("Parameters : \n"+request.getParameterMap()+"\n End"); 

} 
+0

मुझे नहीं लगता कि आप समझते हैं कि मैं क्या चाहता हूं। कृपया पोस्ट फिर से पढ़ें। साथ ही, मैंने जो लिंक दिया है - PHP – Martin

+0

में कार्यान्वयन यूआरएल जो आप उल्लेख कर रहे हैं वह आपके कोड द्वारा बनाई गई है या आप इसे प्राप्त कर रहे हैं? जैसे कि आप यूआरएल सृजन को http://example.com/?foo=1&bar=15&b=3 के रूप में बदल सकते हैं और फिर उपरोक्त कोड का उपयोग कर सकते हैं, आपको फू, बार..एटीसी और मानों के रूप में कुंजियों के साथ नक्शा मिल जाएगा, 1, 15 ... आदि –

+0

ठीक है, लेकिन मैं कैसे अंतर कर सकता हूं कि foo और bar 'a' की कुंजी हैं और बी नहीं है? – Martin