Springbootで@RequestBodyのメタアノテーションを作成できません
以下に示すように、@QueryRequest
Spring用のメタアノテーションを作成したいと思い@RequestBody
ます。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
ただし、次のようなコンパイルエラーがスローされます。 java: annotation type not applicable to this kind of declaration
インターネットで検索すると、正しい@Target
タイプを確認するように指示されます。とにかく、すでにmy@Target
と@Retention
valuesを見ることができるように、それらは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としてこの回答を読む必要があります。https://stackoverflow.com/a/40861154/2148365