Springbootで@RequestBodyのメタアノテーションを作成できません

Aug 15 2020

以下に示すように、@QueryRequestSpring用のメタアノテーションを作成したいと思い@RequestBodyます。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}

ただし、次のようなコンパイルエラーがスローされます。 java: annotation type not applicable to this kind of declaration

インターネットで検索すると、正しい@Targetタイプを確認するように指示されます。とにかく、すでにmy@Target@Retentionvaluesを見ることができるように、それらはSpringのものと同じ@RequestBodyですが、それでも上記のエラーがスローされます。

@Target=ElementType.METHODまたはElementType.TYPEタイプのメタアノテーションを正常に作成しましたが、アノテーションの上で作業を行うことができませんでした。

上記のメタアノテーションの実際の問題点を知っている人はいますか?

回答

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

@Danielは、これがなぜ起こるのかを例で説明しています。

また、回避策を探している人は、上記の@Michielとしてこの回答を読む必要があります。https://stackoverflow.com/a/40861154/2148365