2012-02-09 17 views
9

द्वारा स्प्रिंग एमवीसी अनुरोध मैपिंग को कैसे विभाजित करें स्प्रिंग एमवीसी 3 में मैं यूआरएल पैरामीटर के मूल्य के आधार पर दो अलग-अलग नियंत्रक वर्गों के साथ एक ही यूआरएल को संभालना चाहता हूं। @RequestMapping एनोटेशन भी ऐसे क्षेत्र हैं: पैरामीटर, और मैं दो अलग अलग मैपिंग होगा निम्नलिखित सोचा (मैं कक्षा स्तर पर मानचित्रण का उपयोग करें):पैरामीटर मान

@RequestMapping(value = "/myurl", params = "name=val1") 

और

@RequestMapping(value = "/myurl", params = "name=val2") 

लेकिन यह नहीं है । वसंत दूसरे मामले के लिए अपवाद फेंकता है कि /myurl के लिए नियंत्रक पहले ही मैप किया गया है (पहले मामले में)।

पैरामीटर द्वारा अनुरोध मैपिंग विभाजन के लिए कुछ सटीक समाधान है? @RequestMapping को विस्तारित कर सकते हैं या प्रॉक्सी का उपयोग नियंत्रक के रूप में कर सकते हैं और पैरामीटर के आधार पर विभिन्न नियंत्रकों को कॉल कर सकते हैं ... कोई विचार?

अद्यतन यह केवल तरीकों स्तर पर लेकिन काम करता है, वर्ग स्तर पर नहीं ... हो जाएगा ताकि:

@Controller 
@RequestMapping(value = "/myurl") 
public class Class123 { 

    @RequestMapping(value = {"edit.htm"}, params = "src=1") 
    public String open1(Map<String, Object> map) throws Exception {....} 

    @RequestMapping(value = {"edit.htm"}, params = "src=2") 
    public String open2(Map<String, Object> map) throws Exception {....} 
} 

इस नहीं होंगे: मैं चाहते हैं

@Controller 
@RequestMapping(value = "/myurl", params = "src=1") 
public class Class123_1 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 


@Controller 
@RequestMapping(value = "/myurl", params = "src=2") 
public class Class123_2 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 

और विभिन्न वर्गों में तर्क विभाजित करने के लिए।

+1

यह काम करना चाहिए। मैंने इसका इस्तेमाल किया है, यह काम करता है। कुछ और चल रहा है कि आपने हमें नहीं दिखाया है। शायद कुछ अन्य नियंत्रक ने उस यूआरएल को मैप किया है। – skaffman

+0

+1 यह अधिक जानकारी काम करता है? –

+1

हम्म, शायद यह केवल एक ही कक्षा में विधियों के लिए काम करता है। सुनिश्चित नहीं है कि यह एक बग है या नहीं, हालांकि, दस्तावेज़ीकरण इसका उल्लेख नहीं करता है। शायद आप विधियों को एक वर्ग में रख सकते हैं, लेकिन फिर कार्यान्वयन को अलग रखने के लिए किसी अन्य वर्ग में प्रतिनिधि हो सकते हैं? – skaffman

उत्तर

1

यह RequestMappingHandlerMapping (स्प्रिंग 3.1 में नया) बनाम DefaultAnnotationHandlerMapping (क्लास RequestMappingHandlerMapping द्वारा प्रतिस्थापित) का उपयोग करने के बीच एक अंतर की तरह लगता है।

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