ไม่สามารถสร้าง meta-annotation สำหรับ @RequestBody ใน Springboot

Aug 15 2020

ฉันต้องการสร้าง 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 ข้างต้น?

คำตอบ

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