无法在 Springboot 中为@RequestBody 创建元注解
Unable to create meta-annotation for @RequestBody in Springboot
我想为 Spring 的 @RequestBody
创建一个名为 @QueryRequest
的元注释,如下所示。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
但是,它会抛出一个名为的编译错误,
java: annotation type not applicable to this kind of declaration
当我在互联网上搜索时,它告诉我要验证正确的 @Target
类型。无论如何,正如您已经看到我的 @Target
和 @Retention
值一样,它们与 Spring 的 @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
@Daniel 已经用一个例子解释了为什么会发生这种情况。
此外,任何正在寻找解决方法的人都应该像上面提到的@Michiel 一样阅读这个答案。
我想为 Spring 的 @RequestBody
创建一个名为 @QueryRequest
的元注释,如下所示。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
但是,它会抛出一个名为的编译错误,
java: annotation type not applicable to this kind of declaration
当我在互联网上搜索时,它告诉我要验证正确的 @Target
类型。无论如何,正如您已经看到我的 @Target
和 @Retention
值一样,它们与 Spring 的 @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
@Daniel 已经用一个例子解释了为什么会发生这种情况。
此外,任何正在寻找解决方法的人都应该像上面提到的@Michiel 一样阅读这个答案。