2013-06-15 7 views
6

पर अनुरोध मैपिंग ओवरराइडिंग हमारे अनुप्रयोगों के स्रोत के माध्यम से देखकर, मुझे एक सामान्य स्प्रिंग एमवीसी नियंत्रक मिला जो कॉन्फ़िगरेशन की कुंजी और मानों को कॉपी करता है और कई बार चिपकाता है। अनुरोध परिभाषा मान को छोड़कर, कक्षा परिभाषाएं बिल्कुल वही हैं, क्योंकि प्रत्येक एप्लिकेशन यह पृष्ठ अलग-अलग URL के अंतर्गत उपलब्ध होना चाहता है।स्प्रिंगएमवीसी नियंत्रक

मैं इस नियंत्रक को एक सामान्य पुस्तकालय में ले जाना चाहता हूं, और डिफ़ॉल्ट अनुरोध मैपिंग मान प्रदान करना चाहता हूं।

@Controller 
@RequestMapping (value="/property") 
public class CommonPropertyController { 
    .... 
} 

प्रत्येक एप्लिकेशन इस मान को ओवरराइड कैसे करेगा यदि वे अपने यूआरएल पैटर्न का उपयोग करना चाहते हैं?

उत्तर

11

स्रोत कोड को देखते हुए मुझे यह पता चला कि मैन्युअल (पूर्व-एनोटेशन) हैंडलर परिभाषा (जो आपको चाहिए उसे लागू करने का तरीका भी है) पर वापस जाने के बिना इसे कैसे करना है।

वसंत आपको @RequestMapping मानों में संपत्ति प्लेसहोल्डर कॉन्फ़िगरर्स का उपयोग करने की अनुमति देता है। तो यह है कि इस तथ्य का उपयोग करें और @RequestMapping तरह परिभाषित करना संभव है:

@Controller 
@RequestMapping("${routing.property.path}") 
public class CommonPropertyController { 
    .... 
} 

तो आप बस अपने आवेदन के संदर्भ में सही गुणों के साथ PropertySourcesPlaceholderConfigurer परिभाषित कर सकते हैं और आप जाने के लिए अच्छे हैं।


अद्यतन अगर आपको मामले में वापस आने मानचित्रण संपत्ति speciefied नहीं है करना चाहते संपत्ति प्लेसहोल्डर का उपयोग कर एक डिफ़ॉल्ट मान निर्दिष्ट कर सकते हैं:

@RequestMapping("${routing.property.path:/property}") 
+0

वाह, यह अद्भुत है! – ltfishie

+0

यदि संपत्ति मौजूद नहीं है तो नियंत्रक को अक्षम करने का अतिरिक्त लाभ है। वास्तव में मैं क्या देख रहा हूँ। – ltfishie

+0

मुझे यकीन नहीं है कि आप इस तरह से नियंत्रक को अक्षम करने में सक्षम होंगे। इसे प्लेसहोल्डर के लिए मैप किया जाएगा या आपको अनसुलझा संपत्ति के बारे में त्रुटि मिल सकती है ... बीटीडब्ल्यू। मैंने यह भी देखा है कि प्लेसहोल्डर व्यवहार का उल्लेख @ @ RequestMapping' JavaDoc में किया गया है :) –

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