2012-08-12 5 views
5

मैं एक अभिभावक नियंत्रक वर्ग को परिभाषित करने में सक्षम होना चाहता हूं जिसमें "/ api" का मैपिंग होगा, और फिर मेरे नियंत्रक के साथ उस नियंत्रक का विस्तार करें। तो ApiController होगा:स्प्रिंग नियंत्रकों को लागू करते समय एक सामान्य पैरेंट पथ साझा करें

@Controller 
@RequestMapping("/api") 

उदाहरण के लिए, मेरे उपयोगकर्ता नियंत्रक Base API नियंत्रक का विस्तार है और यह भी पथ के लिए "/ उपयोगकर्ताओं" जोड़ना चाहिए, तो यह "/ API/उपयोगकर्ताओं" अनुरोध करने के लिए जवाब देंगे। तो UserController होगा:

@Controller 
@RequestMapping("/users") 

लेकिन जब से यह ApiController फैली हुई है, यह प्रभावी रूप से/API/उपयोगकर्ताओं के जवाब देंगे।

स्वाभाविक रूप से मैं सभी नियंत्रकों को "/ एपीआई" प्रीपेड कर सकता हूं ताकि यह मूल वर्ग के बिना हासिल किया जा सके, लेकिन यदि संभव हो तो मैं इसे "सही तरीका" करना पसंद करता हूं, ताकि मैं अपने एपीआई कार्यान्वयन को परिभाषित कर सकूं क्लीनर और अधिक दृश्यमान पथ।

मैंने एपीकंट्रोलर बेस क्लास को विस्तारित करने का प्रयास किया, लेकिन यह काम नहीं करता है, UserController अभी भी "/ उपयोगकर्ता" का जवाब देता है और बेस क्लास "/ api" को अनदेखा करता है।

उत्तर

3

हमम। आप इस कोशिश कर सकते हैं, यह क्या मेरे लिए काम करता है:

@RequestMapping("/abstract") 
public abstract class AbstractController { 


} 

@Controller 
public class ExtendedAbstractController extends AbstractController { 

    @RequestMapping("/another") 
    public String anotherTest() { 
     return "another"; 
    } 

} 

ध्यान दें, अपने आधार वर्ग नहीं @Controller एनोटेशन होना आवश्यक है और सार होना चाहिए।

यदि आप नियंत्रक के रूप में एनोटेटेड अमूर्त वर्ग को विस्तारित करने का प्रयास नहीं करते हैं और @RequestMapping है तो आपको RequestMappingHandlerMapping प्रारंभ करने पर चरण में त्रुटियां मिलती हैं।

+1

हाय, क्षमा करें, मैंने आपके उत्तर को किसी भी तरह से याद किया होगा। दुर्भाग्य से यह मेरी ज़रूरत नहीं करेगा, क्योंकि मैं कार्यान्वयन कक्षाओं को अपना "बेस" मैपिंग भी रखना चाहता हूं, इसलिए विस्तारित एबस्ट्रक्शन नियंत्रक के पास @RequestMapping ("/ else") एनोटेशन होना चाहिए ताकि उसके सभी तरीकों में यह उपसर्ग हो। आपके समाधान में, अनुरोध मैपिंग एनोटेशन के साथ केवल विधियों ने एनोटेशन बढ़ाया होगा। – TheZuck

+1

@TheZuck हाँ, मैं देखता हूं और मुझे पता है कि आपको क्या चाहिए। : [बस आपकी मदद करने की कोशिश की गई थी। :) इस समय वसंत एनोटेशन की विरासत का समर्थन नहीं करता है जैसा कि आप चाहते हैं ... बीटीडब्ल्यू आप वसंत जेरा में जा सकते हैं और इसके सुझावों के साथ नए मुद्दे बना सकते हैं। ;) – masted

0

आप के साथ इसे प्राप्त कर सकते हैं:

  1. एक ही पथ उपसर्ग के साथ नियंत्रकों के लिए उप संदर्भ विन्यास बनाने
  2. खुद DispatcherServlet साथ उप संदर्भ निश्चित पथ this answer पर

देखो को मैप किया बनाने । यह एक ही समस्या है, लेकिन @RestControllers के लिए।

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