स्प्रिंगबूट में @RequestBody के लिए मेटा-एनोटेशन बनाने में असमर्थ
मैं नीचे दिखाए गए @QueryRequest
स्प्रिंग की @RequestBody
तरह मेटा-एनोटेशन बनाना चाहता हूं, जिसे कहा जाता है ।
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
हालाँकि, इसे संकलित त्रुटि कहा जाता है, java: annotation type not applicable to this kind of declaration
जब मैंने इंटरनेट में खोज की, तो यह मुझे सही @Target
प्रकार को सत्यापित करने के लिए कहता है । वैसे भी, जैसा कि आप पहले से ही मेरे @Target
और @Retention
मूल्यों को देख सकते हैं , वे वसंत के समान ही हैं @RequestBody
, लेकिन फिर भी त्रुटि से ऊपर है।
मैंने सफलतापूर्वक @Target=ElementType.METHOD
या ElementType.TYPE
प्रकारों के लिए मेटा-एनोटेशन बनाए हैं, लेकिन मैं एनोटेशन के ऊपर काम नहीं कर सका।
किसी को भी पता है कि मेटा-एनोटेशन के ऊपर वास्तव में क्या गलत है?
जवाब
चूंकि @RequestBody एनोटेट है @Target(ElementType.PARAMETER)
आप केवल इस एनोटेशन को एक पैरामीटर पर जोड़ सकते हैं। यहां आप एनोटेशन पर एनोटेशन लागू करने का प्रयास कर रहे हैं। प्राप्त करने के लिए या उसके साथ @RequestBody
एनोटेट किया जाना चाहिए ।@Target(ElementType.ANNOTATION_TYPE)
@Target(ElementType.TYPE)
उदाहरण के लिए यह कोड काम नहीं करेगा क्योंकि आप एनोटेशन पर QueryRequest का एनोटेट नहीं कर सकते:
@Target(ElementType.PARAMETER)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryRequest {
}
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@QueryRequest
@interface NextQueryRequest
हालाँकि यह काम करेगा, क्योंकि आप QueryResult को एनोटेशन पर रखने की अनुमति दे रहे हैं
@Target(ElementType.TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryRequest {
}
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@QueryRequest
@interface NextQueryRequest
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryRequest {
}
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@QueryRequest
@interface NextQueryRequest
@ डैनियल ने बताया है कि ऐसा उदाहरण के साथ क्यों होता है।
इसके अलावा, जिस किसी को भी वर्कअराउंड की तलाश है, उसे इस उत्तर को @Michiel के रूप में पढ़ना चाहिए।https://stackoverflow.com/a/40861154/2148365