2011-05-12 12 views
5

मुझे डेटाबेस में संग्रहीत जानकारी तक पहुंचने के लिए एक आरईएसटी सेवा स्थापित की गई है।एकाधिक प्रकार के साथ REST PathParam

मैं किसी आइटम के id या name पर आधारित पहुंच प्राप्त करने में सक्षम होना चाहता हूं।

तो कहते हैं कि मैं एक रिकॉर्ड

name | id | description 
mine | 65 | "my thing" 
मिल गया है की सुविधा देता है

मैं के माध्यम से इस मद उपयोग करने में सक्षम होना चाहते हैं या तो:

myurl.com/items/65 
myurl.com/items/mine 

मैं जर्सी (जावा पुस्तकालय) का उपयोग कर रहा । क्या कोई तरीका है कि मैं pathParam को object.typeOf() का उपयोग किए बिना या तो एक int या स्ट्रिंग को स्वीकार करने के लिए परिभाषित कर सकता हूं?

मैं इस से बचने के लिए करना चाहते हैं:

@PATH("/items/{identifier} 
@GET 
public String getItem(@PathParam("identifier") Object identifier){ 
    if(identifier.typeOf().equals(String.typeOf())).... 

}

धन्यवाद

+0

क्या आपका मतलब '.typeOf()' के बजाय 'class' है? – Jeremy

+0

मैं सिर्फ टाइपऑफ() बिट बनाने के लिए स्वतंत्र था। नीचे माइक का जवाब उस के लिए सही जावा वाक्यविन्यास दिखाता है। हालांकि अच्छा पकड़ो। धन्यवाद! –

+0

जोचेन ने इसका उल्लेख नीचे दिया लेकिन यह जोर देने योग्य है: यदि संपूर्ण नाम "4711" नाम के रूप में उपयोग करना संभव है तो यह पूरी योजना विफल हो जाएगी। तो सुनिश्चित करें कि ऐसा नहीं हो सकता है! :) – MatrixFrog

उत्तर

4

आप एक "क्लीन" समाधान के लिए देख रहे हैं - मुझे नहीं लगता कि वहाँ एक है। लेकिन आप ऐसा कर सकता है:

@PATH("/items/{identifier}") 
public String getItem(@PathParam("identifier") String identifier){ 
    try { 
     return getByID(Long.parseLong(identifier)); 
    } catch (NumberFormatException ex) { 
     return getByName(identifier); 
    } 
} 

इसके अलावा, इस संकलन नहीं होगा - वहाँ typeOf() जैसी कोई विधि है:

if(identifier.typeOf().equals(String.typeOf())) 

मुझे लगता है कि आप का मतलब:

if (identifier instanceof String) 

संपादित करें: और वैसे भी, आपका मूल विचार (पैरामीटर प्रकार कोपर सेट करना, फिर सटीक उदाहरण प्रकार की जांच) काम नहीं करेगा; कंटेनर को यह जानने का कोई तरीका नहीं है कि पथ तत्व पूर्णांक हो सकता है, इसलिए यह इसे पूर्णांक के रूप में पार्स करने का प्रयास नहीं करेगा, और यह आपको हर बार String देगा।

+0

स्ट्रिंग का उपयोग करके +1 और यदि आवश्यक हो तो लंबे समय तक पार्सिंग करना इसे करने का सबसे साफ तरीका है। – fmucar

+0

'लांग' को पार्स करने का प्रयास करने पर शानदार विचार। धन्यवाद! –

+3

जब तक कोई व्यक्ति आइटम के साथ आता है और नाम 4711 ... –

संबंधित मुद्दे