Không thể tạo chú thích meta cho @RequestBody trong Springboot
Tôi muốn tạo một chú thích meta, được gọi là @QueryRequest
, cho Spring @RequestBody
giống như được hiển thị bên dưới.
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
Tuy nhiên, nó đưa ra một lỗi biên dịch có tên là,java: annotation type not applicable to this kind of declaration
Khi tôi tìm kiếm trên internet, nó bảo tôi xác minh đúng @Target
loại. Dù sao, như bạn đã có thể thấy các giá trị @Target
và của tôi @Retention
, chúng giống như giá trị của Spring @RequestBody
, nhưng vẫn xảy ra lỗi ở trên.
Tôi đã tạo thành công chú thích meta cho @Target=ElementType.METHOD
hoặc ElementType.TYPE
loại, nhưng tôi không thể thực hiện công việc ở trên chú thích.
Có ai biết điều gì thực sự sai với chú thích meta ở trên không?
Trả lời
Vì @RequestBody được chú thích @Target(ElementType.PARAMETER)
nên bạn chỉ có thể thêm chú thích này vào một tham số. Ở đây bạn đang cố gắng áp dụng chú thích trên một chú thích. Để đạt được điều đó @RequestBody
nên được chú thích với @Target(ElementType.ANNOTATION_TYPE)
hoặc với @Target(ElementType.TYPE)
.
Ví dụ: mã này sẽ không hoạt động vì bạn không thể chú thích QueryRequest trên một chú thích:
@Target(ElementType.PARAMETER)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryRequest {
}
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@QueryRequest
@interface NextQueryRequest
Tuy nhiên, điều này sẽ hoạt động, bởi vì bạn đang cho phép QueryResult được đưa vào chú thích
@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
@Daniel đã giải thích lý do tại sao điều này xảy ra với một ví dụ.
Ngoài ra, bất kỳ ai đang tìm kiếm giải pháp thay thế nên đọc câu trả lời này như @Michiel đã đề cập ở trên.https://stackoverflow.com/a/40861154/2148365