2013-06-11 8 views
5

मैं स्प्रिंग एमवीसी का उपयोग करके विभिन्न आरईएसटी सेवाओं के कार्यान्वयन पर काम कर रहा हूं। प्रलेखन के लिए, मैं स्वैगर का उपयोग कर रहा हूं।उन्हें दोहराने से बचने के लिए एकाधिक एनोटेशन को एक साथ मिलाएं

यह अच्छा काम करता है और प्रलेखन अच्छा दिखता है और वास्तव में कार्यात्मक है। मेरे पास एकमात्र समस्या यह है कि दस्तावेज़ीकरण के लिए टिप्पणियां वास्तव में नियंत्रक वर्गों को भीड़ देती हैं, खासकर त्रुटि कोड एनोटेशन।

उदाहरण:

@ApiErrors(value = { 
    @ApiError(code = 123, reason = "Reason123"), 
    @ApiError(code = 124, reason = "Reason124"), 
    @ApiError(code = 125, reason = "Reason125"), 
    @ApiError(code = 126, reason = "Reason126"), 
    @ApiError(code = 127, reason = "Reason127") }) 
public void exampleFunctionImplementation() { 
} 

कई मामलों में, इस एनोटेशन जहां वास्तविक आवेदन कोड बीच में कहीं छिपा हुआ है के बड़े ब्लॉकों की ओर जाता है। इसके अतिरिक्त, इस एनोटेशन सेट को अक्सर दोहराया जाता है, क्योंकि कई विधियां त्रुटि कोड के समान सेट को वापस कर सकती हैं।

क्या किसी अन्य वर्ग फ़ाइल में स्थिरता के रूप में कहीं और एनोटेशन सूची को परिभाषित करने के माध्यम से इसे छोटा करने का कोई विकल्प है? या हो सकता है कि कुछ और आसान हो, मैंने अनदेखा किया हो सकता है? पहले से

ApiError[] array = {ApiError(code = 123, reason = "Reason123")}; 

मुझे खुशी है कि अगर किसी को भी मुझे हल करने के लिए कैसे एक संकेत इस समस्या को दे सकता है हो सकता है, धन्यवाद:

मैंने कहीं @ApiError मदों की सरणी परिभाषित करने के साथ करने की कोशिश की है, लेकिन इस संकलन नहीं होगा!

+0

आप दोनों में एक ही समस्या है: http://stackoverflow.com/questions/14195155/ibatis-create-an-array-of-multiple-annotations-annotation-reuse – Anderson

उत्तर

1

एनोटेशन सदस्यों के पास केवल सीमित प्रकार हैं (JLS 9.6)।

यह एक संकलन समय त्रुटि है अगर एक विधि एक टिप्पणी का प्रकार में घोषित की वापसी प्रकार निम्न में से एक नहीं है: एक आदिम प्रकार, स्ट्रिंग, कक्षा, कक्षा के किसी भी पैरामिट्रीकृत मंगलाचरण, एक enum प्रकार (§8.9), एक एनोटेशन प्रकार, या एक सरणी प्रकार (§10) जिसका तत्व प्रकार पिछले प्रकारों में से एक है।

उनके मूल्य निरंतर अभिव्यक्ति (जेएलएस 9.7) होना चाहिए। मानक शब्द शब्द का उपयोग करता है।

टी एक सरणी प्रकार है ई [] और या तो:

वी एक ElementValueArrayInitializer और प्रत्येक ElementValue (एक VariableInitializer के अनुरूप एक सरणी प्रारंभकर्ता में) वी में है ई के अनुरूप है; या

वी एक ElementValue कि ई

के अनुरूप है है वी के प्रकार है असाइनमेंट संगत (§5.2) टी, और इसके अलावा के साथ:

, तो टी एक आदिम प्रकार या स्ट्रिंग है और वी एक निरंतर अभिव्यक्ति है (§15.28)।

वी शून्य नहीं है।

यदि टी कक्षा है, या कक्षा का आविष्कार, और वी एक वर्ग शाब्दिक (§15.8.2) है।

यदि टी एनम प्रकार है, और वी एक enum स्थिर है।

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

+1

क्या दयालुता - किसी भी तरह, मुझे उम्मीद थी किसी भी तरह से एनोटेशन के सेट का पुन: उपयोग करने के लिए यह एक चालाक तरीका होगा :-( – Volker

+0

जावा 8 मदद करेगा। http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html –

+1

@EricJablow देखें, यह नई सुविधा अच्छी है लेकिन इससे मदद नहीं मिलेगी। क्योंकि विषय स्टार्टर विधियों के बीच एनोटेशन को डुप्लिकेट नहीं करना चाहता है। वह एक बार बोझिल एनोटेशन को परिभाषित करना चाहता है और इसे अन्य तरीकों से लागू करना चाहता है। मुझे स्वैगर के साथ थोड़ी सी समस्या है। – walv

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