2015-12-17 7 views
6

के अंदर मैं Restful सेवाओं में नया हूं। मैं एक कोड के माध्यम से जा रहा है और इस लाइनकॉलन का अर्थ (:) @Path एनोटेशन

@GET 

@Path("{image:image/.*}") 

कोई अर्थ और इसके बाद के संस्करण वाक्य रचना के उपयोग के बारे में समझाएं सकते हैं मिला था?

+0

इसका उपयोग रेगेक्स का सिर्फ एक हिस्सा है ... –

+0

@ जुनेड अहसान यह कम से कम 'छवि:' उपसर्ग नहीं है। –

उत्तर

4

@Path नोटेशन पैटर्न से मेल खाने के लिए पथ या रेगेक्स से मेल खाने के लिए सामान्य स्ट्रिंग का समर्थन करता है। आपके मामले में

@Path("{image:image/.*}") 

सिर्फ छवि की तरह किसी भी पैटर्न /.*, जो मूल रूप से छवि/कुछ भी करने के लिए अनुवाद के साथ

पथ परम {image} के एक पैटर्न मिलान किया जा रहा है, कुछ भी यहाँ नहीं है 'कुछ भी' शब्द का संदर्भ लें, लेकिन इसका शाब्दिक अर्थ यानी कोई वैध पाठ।

सुधार: पूर्ण विवरण के लिए @Sotirios Delimanolis जवाब का संदर्भ लें। सुधार इनपुट के लिए धन्यवाद साथी।

3

नोटेशन यूआरआई पथ टेम्पलेट्स के रूप में जाना जाता है और documentation में वर्णित है।

आप ब्रैकेट {} के भीतर इसे घोषित करके एक नया टेम्पलेट वैरिएबल परिभाषित करते हैं। जेएक्स-आरएस पर्यावरण अनुरोधित यूआरआई से संबंधित पथ खंड को @PathParam हैंडलर विधि पैरामीटर घोषित करेगा।

प्रलेखन

यूआरआई पथ टेम्पलेट्स यूआरआई वाक्य रचना के रूप में एम्बेडेड चर के साथ यूआरआई हैं से

। प्रतिस्थापित यूआरआई के आधार पर अनुरोध के जवाब देने के लिए संसाधन के क्रम में इन चर को रनटाइम पर प्रतिस्थापित किया जाता है। चर को ब्रेसिज़ ({ और }) द्वारा दर्शाया गया है। उदाहरण के लिए, निम्नलिखित @Path एनोटेशन को देखो:

@Path("https://stackoverflow.com/users/{username}") 

उदाहरण इस तरह का में, एक उपयोगकर्ता द्वारा अपना नाम, टाइप करने के लिए कहा जाता है और फिर एक JAX-आरएस वेब सेवा के लिए कॉन्फ़िगर करने के लिए अनुरोध का जवाब देना यह यूआरआई पथ टेम्पलेट जवाब देता है। उदाहरण के लिए, यदि उपयोगकर्ता उपयोगकर्ता नाम "गैलिलियो," वेब सेवा निम्न URL का जवाब:

http://example.com/users/Galileo 

उपयोगकर्ता नाम का मान प्राप्त करने के लिए, @PathParam एनोटेशन हो सकता है पर इस्तेमाल किया एक अनुरोध विधि की विधि पैरामीटर, निम्न कोड उदाहरण में दिखाया गया:

@Path("https://stackoverflow.com/users/{username}") 
public class UserResource { 

    @GET 
    @Produces("text/xml") 
    public String getUser(@PathParam("username") String userName) { 
     ... 
    } 
} 

प्रलेखन तो अंकन के लिए वाक्यविन्यास निर्दिष्ट करने के लिए पर चला जाता है

डिफ़ॉल्ट रूप से, यूआरआई चर "रेगुलर एक्सप्रेशन से मेल खाना चाहिए [^ /] +?"यह चर चर नाम के बाद एक अलग नियमित अभिव्यक्ति निर्दिष्ट द्वारा अनुकूलित किया जा सकता है। उदाहरण के लिए, अगर एक उपयोगकर्ता नाम, केवल छोटे और बड़े अक्षरांकीय वर्ण होने चर में डिफ़ॉल्ट नियमित अभिव्यक्ति ओवरराइड चाहिए परिभाषा:।

@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}") 

इस उदाहरण में उपयोगकर्ता नाम चर केवल उपयोगकर्ता नाम है कि एक अपरकेस या लोअरकेस पत्र और शून्य या अधिक अक्षरांकीय अक्षर और अंडरस्कोर वर्ण के साथ शुरू से मेल खाएगी तो एक उपयोगकर्ता नाम घ ओएस उस टेम्पलेट से मेल नहीं खाता है, क्लाइंट को 404 (नहीं मिला) प्रतिक्रिया भेजी जाएगी।

तो अपने उदाहरण

@Path("{image:image/.*}") 

यूआरआई टेम्पलेट चर image नामित कि एक खंड regex

image/.* 
मिलान होता है परिभाषित करता है

JAX-आरएस पर्यावरण इसलिए अनुरोधों के लिए अपनी टिप्पणी किए गए विधि का उपयोग करेगा

http://somehost.com/context-path/image/[anything] 
से मेल खाने वाले यूआरआई

मुमकिन है, अपने विधि एक पैरामीटर

@Path("{image:image/.*}") 
public Response handle(@PathParam("image") String path) { /* handling */ } 

और path है "image/[anything]" का मान होना होगा।

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