ไม่สามารถสร้าง meta-annotation สำหรับ @RequestBody ใน Springboot
ฉันต้องการสร้าง meta-annotation ที่เรียกว่า@QueryRequest
สำหรับ Spring @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
ประเภทสำเร็จแล้ว แต่ฉันไม่สามารถทำงานเหนือคำอธิบายประกอบได้
ใครทราบว่ามีอะไรผิดปกติกับ meta-annotation ข้างต้น?
คำตอบ
เนื่องจาก @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