स्प्रिंगबूट में @RequestBody के लिए मेटा-एनोटेशन बनाने में असमर्थ

Aug 15 2020

मैं नीचे दिखाए गए @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प्रकारों के लिए मेटा-एनोटेशन बनाए हैं, लेकिन मैं एनोटेशन के ऊपर काम नहीं कर सका।

किसी को भी पता है कि मेटा-एनोटेशन के ऊपर वास्तव में क्या गलत है?

जवाब

1 DanielJacob Aug 16 2020 at 02:15

चूंकि @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
isuru89 Aug 16 2020 at 10:19

@ डैनियल ने बताया है कि ऐसा उदाहरण के साथ क्यों होता है।

इसके अलावा, जिस किसी को भी वर्कअराउंड की तलाश है, उसे इस उत्तर को @Michiel के रूप में पढ़ना चाहिए।https://stackoverflow.com/a/40861154/2148365