2013-11-14 8 views
6

मैं जैसे अनुरोध मानचित्रण के बीच में रख सकते हैं/** वाइल्डकार्ड: "/ कुछ/संसाधन/**/somthing"स्प्रिंग अनुरोध मानचित्रण वाइल्डकार्ड अपवाद

स्प्रिंग 3 में मैं इस

@RequestMapping("/some/resource/**") 
कर सकते हैं

रास्तों भागों के किसी भी संख्या के लिए मैप करने के लिए

/some/resource/A -> ControllerMethod1 
/some/resource/A/B -> ControllerMethod1 
/some/resource/A/B/C/D/E/F -> ControllerMethod1 

हालांकि इस मानचित्रण भी लालची और Wil है एल मुझे

/some/resource/A/somthing -> ControllerMethod2 
/some/resource/A/B/somthing -> ControllerMethod2 
/some/resource/A/B/C/D/E/F/somthing -> ControllerMethod2 

मैं यह कैसे कर सकते के रूप में एक और नियंत्रक इस तरह के लिए एक उप यूआरएल @RequestMapping("/some/resource/**/somthing") मैप करने के लिए अनुमति नहीं दी?

उत्तर

7

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

मैं आपको अनुरोध के अंतिम भाग को मानचित्र बनाने के लिए 16.3.2.2. URI Template Patterns with Regular Expressions को आजमाने का सुझाव दूंगा (अभी तक इस दृष्टिकोण को आजमाया नहीं है)।

इसके अलावा आप PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE का उपयोग कर शेष अनुरोध से मेल खाते हैं, और वहां कुछ अभिव्यक्ति लागू करते हैं। Check this post.

अन्यथा आपको उस स्थिति से मेल खाने के लिए अनुरोध पैरामीटर का उपयोग करना चाहिए 16.3.2.6. Request Parameters and Header Values

आप "माईपाराम", "! MyParam", या "myParam = myValue" जैसे अनुरोध पैरामीटर शर्तों के माध्यम से अनुरोध को संकीर्ण कर सकते हैं। अनुरोध पैरामीटर प्रेसिजन/अनुपस्थिति के लिए पहला दो परीक्षण और एक विशिष्ट पैरामीटर मान के लिए तीसरा। अनुरोध पैरामीटर मान शर्त के साथ यहां एक उदाहरण दिया गया है।

इस मामले आपको लगता है कि का उपयोग कर पैरामीटर

@RequestMapping(value = {"/some/resource/**"}, params="somthing") 

या विधि हस्ताक्षर में की आवश्यकता नहीं विशेषता के साथ टिप्पणी अनुरोध पैरामीटर का उपयोग की तरह कुछ के नक्शे होगा:

public void test(@RequestParam(value = "somthing", required=false) String str) { 
संबंधित मुद्दे