2015-10-08 12 views
6

के बिना @RequestMapping कार्यक्षमता (जावा विधि मैपिंग के लिए यूआरएल) का उपयोग करें, मैं एक ऐप को प्रतिस्थापित करने के लिए एक साधारण पीओसी बनाने की कोशिश कर रहा हूं जो वर्तमान में मुख्य जावा (स्प्रिंग एमवीसी 4.2) वेब ऐप में लोड की गई जेएआर फाइलों पर निर्भर करता है शुरुआत पर अतिरिक्त नियंत्रकों की घोषणा करें। आदर्श रूप मेंHTTP अनुरोध/सर्वलेट

Client <--HTTP--> Gateway+app (Spring MVC + order.jar)

Exposed endpoints: 
/ping via controller in core Spring app 
/orderApp/doSomething via controller in order.jar 

, मैं अपने HTTP साथ स्प्रिंग एकता 4.2 (AMQP के माध्यम से) का उपयोग करते हुए, स्टैंडअलोन स्प्रिंग बूट क्षुधा होने के लिए प्रत्येक JAR फ़ाइल करना चाहते हैं डेटा का आदान प्रदान: यह काफी है कि तरह लग रहा है गेटवे बाहरी दुनिया का सामना करना पड़ रहा है। एक छोटी सी स्कीमा:

Client <--HTTP--> Gateway (Spring MVC) <--AMQP--> Standalone orderApp (Spring Boot)

Exposed endpoints: 
/ping via controller in core Spring MVC app 
/{appName}/** via controller in core Spring MVC app 

मैं पता चलता है कि जो AMQP विनिमय appName के आधार पर संदेश प्राप्त होने चाहिए MVC अनुप्रयोग में नियंत्रक में तर्क है, मैं एक प्रवेश द्वार का उपयोग कर HTTP अनुरोध serialise, भेज यह उचित ऐप पर, इसे संसाधित कर सकता है, मुख्य स्प्रिंग ऐप का जवाब वापस भेज सकता है जो ग्राहक को प्रतिक्रिया देता है। यहां कोई समस्या नहीं है।

हालांकि, मैं चाहता हूं कि सुविधाजनक @RequestMapping एनोटेशन का पुन: उपयोग करना संभव हो कि मैं वर्तमान में अपनी जेएआर फाइलों में उपयोग कर रहा हूं। इन जार में मूल रूप से अतिरिक्त नियंत्रक होते हैं, जो किसी दिए गए रूट के नीचे एंडपॉइंट्स को उजागर करते हैं।

प्रश्न

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

@RequestMapping("projects/{projectId}") 
public Project projectById(@PathVariable final String projectId) { 

    (...) 
    return project; 
} 

वहाँ किसी भी तरह से है कि एक कस्टम सेवा कोड से कहीं मेरी स्टैंडअलोन अनुप्रयोग में मैं एक जैसे handler.getResponse("projects/123abc", requestBody, requestHeaders) कॉल कर सकता है, जो विधि इनपुट पैरामीटर/यूआरएल दिए जाने के लिए?

मुझे @RequestMapping से सभी सुविधाएं नहीं चाहिए (उदाहरण के लिए HttpServletRequest/HttpServletResponse तक कोई सीधी पहुंच नहीं है)। मैं क्या करना चाहता हूं HttpServletRequest के मॉक की तरह थोड़ा सा है, लेकिन सर्वलेट्स और सबकुछ के सभी ओवरहेड के बिना। और यह "उत्पादन" कोड होना चाहिए, परीक्षण में इस्तेमाल नहीं किया जाना चाहिए।

अन्यथा, मेरे पास @RequestMapping से कुछ और उपयोग करने के खिलाफ कुछ भी नहीं है, बशर्ते कि मैं यूआरआई और जावा विधियों के बीच एक ही तरह का मैपिंग प्राप्त कर सकूं, स्वचालित रूप से यूआरआई से निकाले गए पैरामीटर प्राप्त कर रहा हूं। एक कस्टम वसंत एकीकरण राउटर? मुझे पता है कि एसआई में कुछ request-mapping समर्थन है, लेकिन मैंने जो देखा है उससे केवल HTTP से अधिक है।

उत्तर

1

यह पूरी तरह स्पष्ट नहीं है कि आप क्या देख रहे हैं; आपने पहले ही कहा है कि आप नियंत्रक में एक्सचेंज/रूटिंग कुंजी निर्धारित करके बैक-एंड ऐप पर जा रहे हैं।

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

सवाल यह है कि आप उस जानकारी (मार्ग) को पिछली छोर पर कैसे संवाद करने जा रहे हैं - संभावित रूप से एक संदेश संपत्ति/शीर्षलेख में।

आप सही हैं कि एसआई केवल HTTP अंतराल में आंतरिक रूप से मैपिंग अनुरोध का उपयोग करता है, लेकिन एक एनोटेशन-आधारित राउटर लिखने से आपको कुछ भी नहीं रोकता है जो एक ही एनोटेशन का उपयोग करता है।