无法在 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.METHODElementType.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 一样阅读这个答案。