2011-04-18 6 views
9

मेरे पास एक वेबपैप है जो किसी विशेष यूआरआई पर रीडायरेक्ट करता है: मान लें कि /सेवा/लाइब्रेरी। एक और बंडल में, मेरे पास एक जैक्सर्स सर्वर है जो यूआरआई में /सेवा के लिए सुनता है, और अनुरोध को संभालने के लिए कुछ बीन्स परिभाषित करता है। वहां पहले से ही कुछ बीन्स हैं, और कक्षाओं में से एक को पहले ही /सेवा/पुस्तकालय के अनुरोधों को संभालने के लिए लागू किया गया है। मैं एक नई कक्षा बनाने की कोशिश कर रहा हूं जो /सेवा/पुस्तकालय के लिए अनुरोधों को भी संभालता है, लेकिन एक अलग पूर्ण यूआरआई पथ के साथ, उदाहरण के लिए: /सेवा/लाइब्रेरी/mynewlibrary। मेरा सवाल यह है कि, दो वर्गों में एक ही @ पैथ पहचानकर्ता को परिभाषित करना संभव है, या अन्य शब्दों में, उन्हें अद्वितीय होना चाहिए, क्या मुझे /सेवा/mylibrary जैसे यूआरआई को लागू करने के बजाय मेरे नए वर्ग कार्यान्वयन के लिए उपयोग करना होगा एक दूसरी कक्षा जो एक ही @ पैथ पहचानकर्ता का भी उपयोग करती है? मैं जेएक्स-आरएस के लिए काफी नया हूं, इसलिए मुझे आशा है कि मेरा प्रश्न समझ में आता है!जेएक्स-आरएस - क्या दो वर्गों में समान @ पैथ पहचानकर्ता हो सकता है?

धन्यवाद!

+1

जब आप इसे आजमाते हैं तो क्या होता है? –

+0

जब मैंने कोशिश की, मेरी नई कक्षा में किसी भी तरीके को बुलाया नहीं जा रहा है, और वर्तमान कक्षा हैंडलिंग/सेवा/पुस्तकालय से केवल विधियों को – Stephen

+0

@ user663041 कहा जा रहा है क्या आप सुनिश्चित हैं कि नई कक्षा पंजीकृत है? आप किस जेएक्स-आरएस ढांचे का उपयोग करते हैं? – Tarlog

उत्तर

4

यूआरआई से मेल खाने वाले दो @ पाथ एनोटेशन होना संभव है। आपके मामले में, यदि सर्वलेट-मैपिंग service है, तो आपके पास @Path("/library") और @Path("library/mynewlibrary") हो सकता है। जब अनुरोध आता है, मिलान पथ को अवरोही क्रम में क्रमबद्ध किया जाता है, इसलिए दूसरी कक्षा को कॉल किया जाना चाहिए, जब /service/library/mynewlibrary के साथ अनुरोध आता है।

+0

क्या @ @Path ("लाइब्रेरी/mynewlibrary") है जिसका आपने उल्लेख किया है, कक्षा के लिए @Path पहचानकर्ता या कक्षा के भीतर विधि? यही वह है जो मैं करने की कोशिश कर रहा हूं: कक्षा ए 'सेवा/लाइब्रेरी/किताबें' को संभालेगा और कक्षा बी 'सेवा/लाइब्रेरी/मूवीज़' को संभालेगी, इसलिए उनके पास @Path ("/ library") पहचानकर्ता होगा उनकी कक्षा घोषणा, जबकि दो वर्गों के भीतर विधियां दो अलग-अलग यूआरआई को संभालेगी। उदाहरण के लिए, classA.getBooks() में '@Path ("/books ") होगा और classB.getMovies() में' @Path ("/ movies") होगा, मान लीजिए कि वे सभी सापेक्ष पथ हैं। क्या यह दो @ पाथ ("/ लाइब्रेरी") के लिए संभव है? – Stephen

+0

मेरा मतलब वर्ग एनोटेशन है और विधि एनोटेशन नहीं है। आपका दृष्टिकोण काम नहीं करेगा, क्योंकि ढांचा गलत वर्ग का चयन कर सकता है: यह सबसे पहले सबसे सही वर्ग और फिर सबसे सही विधि का चयन करने का प्रयास करता है। – Tarlog

+0

यदि आपके पास एक पुस्तक है जो "किताबें" और एक वर्ग है जो "फिल्मों" को संभालती है, तो आपको विधि स्तर एनोटेशन की आवश्यकता क्यों है? कक्षा स्तर पर एनोटेशन रखें और समस्या हल हो जाएगी। – Tarlog

1

यह संभवतः @Path एनोटेशन के साथ दो विधियों के लिए संभव है, उदाहरण के लिए, यदि वे अन्य माध्यमों (जैसे HTTP विधि या @Consumes एनोटेशन) द्वारा प्रतिष्ठित हैं। वर्ग पर @Path वर्ग की विधियों पर @Path एस के लिए डिफ़ॉल्ट/रूट के रूप में कार्य करता है। इसके अलावा, यह कोई समस्या नहीं है यदि आपके पास एक रास्ता है जो "भीतर" है; जेएक्स-आरएस निर्दिष्ट करता है कि सबसे विशिष्ट मिलान का उपयोग किया जाता है। (मैं इसे इस तरह से नहीं करना पसंद करता हूं, इसके बजाय "बाहरी" वर्ग को "आंशिक" वर्ग का एक उपयुक्त आंशिक मिलान पर संदर्भ देता है, ताकि प्रत्येक पथ में जिम्मेदारी के लिए एक पता लगाने योग्य मार्ग हो जो निश्चित रूप से एक वर्ग की ओर जाता है। इसके लिए @Path एनोटेशन की व्यवस्था करने का एक बिल्कुल अलग तरीका है।)

लेकिन यदि आप दो विधियों के साथ समाप्त हो गए हैं जो एक ही आने वाले अनुरोध की सेवा कर सकते हैं, तो आपको एक संघर्ष मिला है और जेएक्स-आरएस कार्यान्वयन होगा कौन सा उपयोग करने के लिए स्वतंत्र (कार्यान्वयन-निर्भर तरीके से)। संभवतः यह नहीं है कि आप क्या चाहते हैं, क्योंकि कंप्यूटर मुफ्त विकल्प दिए जाने पर खराब निर्णय लेते हैं।

0

आप नीचे दिए गए कॉन्फ़िगरेशन का उपयोग कर/सेवा/लाइब्रेरी/mynewlibrary रखने के लिए अपना लक्ष्य प्राप्त कर सकते हैं।

आपकी मौजूदा कक्षा में आपके पास कक्षा स्तर पर कॉन्फ़िगर/सेवा/लाइब्रेरी है ताकि आप जो कक्षा जोड़ रहे हैं उसमें कक्षा स्तर पर कॉन्फ़िगर/सेवा कर सकें और फिर विधि स्तर कॉन्फ़िगर/लाइब्रेरी/mynewlibrary पर कॉन्फ़िगर कर सकें।

इस तरह से दोनों वर्गों के लिए एक ही रास्ता नहीं होगा और आपका लक्ष्य भी हासिल किया जाएगा। मैंने कोशिश की और यह काम करता है।

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