2016-01-04 6 views
5

कृपया मेरे HomeController खोजने के लिए और DemoControllerअभिगमन के लिए एकाधिक नियंत्रकों

class HomeController{ 
@RequestMapping(value="index") 
public void home(){ 
} 
} 

class DemoController{ 
@RequestMapping(value="index") 
public void demo(){ 
} 
} 

जब मैं सूचकांक के लिए एक अनुरोध भेजने का प्रयास है, जो एक निष्पादित हो जाएगा? मैं जानना चाहता था कि हमारे पास एकाधिक नियंत्रकों के लिए एक ही अनुरोध मैपिंग मान कैसे हो सकता है

+1

आप नहीं कर सकते। एक यूआरएल केवल एक नियंत्रक के लिए मैप किया जा सकता है। यह अद्वितीय होना चाहिए। –

+0

ध्यान दें कि यह वैसे भी अर्थहीन होगा। यूआरएल का पूरा बिंदु यह है कि यह आपको बताता है कि कुछ कहां प्राप्त करें। – chrylis

+2

जब आप बड़ी संख्या में विधियों को अलग करने के लिए नियंत्रकों का उपयोग करते हैं, तो यह अर्थहीन नहीं है, लेकिन प्रत्येक विधि को अलग करने के लिए अतिरिक्त खंड जोड़ना, इस तरह पथ अभी भी अनूठा है क्योंकि हर विधि में अलग-अलग मैपिंग होते हैं, टकराव नहीं होते हैं। हालांकि वसंत एमवीसी उसको अस्वीकार कर रहा है। – raspacorp

उत्तर

2

Spring Web MVC में यह संभव नहीं है:

क्या आप के बजाय कर सकते हैं अनुरोध मानचित्रण विस्तार करने के लिए है। प्रत्येक मानचित्रण आपके संदर्भ में अद्वितीय होना चाहिए। यदि नहीं, तो संदर्भ संदर्भ के दौरान आपको RuntimeException प्राप्त होगा।

आप अपने एंडपॉइंट्स को अलग करने के लिए पैरामीटर का भी उपयोग नहीं कर सकते हैं क्योंकि उपयुक्त हैंडलर (सर्वलेट वातावरण के लिए लागू) की खोज करते समय उनका मूल्यांकन नहीं किया जाता है। @RequestMapping से जावाडोक:

एक सर्वलेट वातावरण में, पैरामीटर मैपिंग को प्रकार के स्तर पर लागू प्रतिबंधों के रूप में माना जाता है। प्राथमिक पथ मैपिंग (यानी निर्दिष्ट यूआरआई मान) को अभी भी लक्ष्य हैंडलर की विशिष्ट पहचान करना है, पैरामीटर मैपिंग्स हैंडलर को आविष्कार करने के लिए बस पूर्व शर्त व्यक्त करते हैं।

ध्यान दें कि आप विपरीत कर सकते हैं, इसलिए एकाधिक यूआरएल एक ही हैंडलर को इंगित कर सकते हैं। Spring MVC: Mapping Multiple URLs to Same Controller

+1

वह दस्तावेज कम से कम आंशिक रूप से पुराना है। इसका जिक्र करने के लिए धन्यवाद; मैं जांच करूंगा और एक डॉक्टर मुद्दा खोल सकता हूं। – chrylis

+0

@ मार्को फेरारी क्या होता है यदि मैं एक ही RequstMapping के साथ दो नियंत्रक वर्ग बनाना चाहता हूं और प्रत्येक के पास अलग-अलग तरीके और विभिन्न विधि अनुरोध मैपिंग –

+0

@MeladEzzat स्वीकार्य है। बूट की शुरूआत के त्वरित संपादन से इसे आजमाएं [यहां] (https://spring.io/guides/gs/spring-boot/) –

4

दुर्भाग्यवश, यह संभव नहीं है। अनुरोध मैपिंग अद्वितीय होना चाहिए अन्यथा एप्लिकेशन यह निर्धारित नहीं कर सकता कि आने वाले अनुरोध को किस विधि से मैप किया जाना चाहिए।

class HomeController{ 

    @RequestMapping(value="home/index") 
    public void home(){ 
    } 
} 

class DemoController{ 

    @RequestMapping(value="demo/index") 
    public void demo(){ 
    } 
} 
5

https://stackoverflow.com/a/34590355/2682499 इस बिंदु पर केवल आंशिक रूप से सही है।

आप कई नियंत्रक विधियों को उसी यूआरआई का उपयोग तब तक कर सकते हैं जब तक आप वसंत पर्याप्त अतिरिक्त जानकारी प्रदान करते हैं जिस पर इसका उपयोग करना चाहिए। चाहे आप करना चाहिए या नहीं यह एक अलग सवाल है। हालांकि, मैं निश्चित रूप से भ्रम से बचने के लिए दो अलग-अलग नियंत्रक कक्षाओं में एक ही यूआरआई का उपयोग करने की अनुशंसा नहीं करता हूं।

आप कुछ इस तरह कर सकते हैं:

class HomeController{ 
    @RequestMapping(value="/index", params = {"!name", "!foo"}) 
    public List<Something> listItems(){ 
     // retrieve Something list 
    } 

    @RequestMapping(value="/index", params = "name") 
    public List<Something> listItems(String name) { 
     // retrieve Something list WHERE name LIKE %name% 
    } 

    @RequestMapping(value="/index", params = {"!name", "foo"}) 
    public List<Something> listItems(String foo) { 
     // Do something completely different 
    } 
} 

क्या संभव है जब यूआरआई अधिक भार आप @ReqeustMapping प्रलेखन का उल्लेख होना चाहिए पर पूर्ण प्रलेखन के लिए: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html। और, अनुभाग अनुरोध पैरामीटर के लिए विशेष रूप से https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params--

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