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
유형 인지 확인하라는 메시지가 표시 됩니다. 어쨌든 내 값 @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로이 답변을 읽어야합니다.https://stackoverflow.com/a/40861154/2148365