Springboot'ta @RequestBody için meta not oluşturulamıyor
Aşağıda gösterildiği gibi @QueryRequest
Baharlar için bir meta-açıklama oluşturmak istiyorum @RequestBody
.
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@RequestBody
public @interface QueryRequest {
}
Ancak, şu adında bir derleme hatası atar: java: annotation type not applicable to this kind of declaration
İnternette arama yaptığımda, bana doğru @Target
türü doğrulamamı söylüyor . Her neyse, benim @Target
ve @Retention
değerlerimi zaten görebildiğiniz gibi @RequestBody
, Spring'inki ile aynıdır , ancak yine de hatanın üstünde atılır.
@Target=ElementType.METHOD
Veya ElementType.TYPE
türleri için başarılı bir şekilde meta ek açıklamalar oluşturdum , ancak ek açıklamanın üstünde çalışma yapamadım.
Yukarıdaki meta açıklamada aslında neyin yanlış olduğunu bilen var mı?
Yanıtlar
@RequestBody ek açıklamalı olduğundan, @Target(ElementType.PARAMETER)
bu açıklamayı yalnızca bir parametreye ekleyebilirsiniz. Burada ek açıklamayı bir ek açıklamaya uygulamaya çalışıyorsunuz. Bunu başarmak için @RequestBody
ile @Target(ElementType.ANNOTATION_TYPE)
veya ile açıklamalı olması gerekirdi @Target(ElementType.TYPE)
.
Örneğin, bir ek açıklama üzerinde QueryRequest'e açıklama ekleyemediğiniz için bu kod çalışmaz:
@Target(ElementType.PARAMETER)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface QueryRequest {
}
@Target(ElementType.ANNOTATION_TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@QueryRequest
@interface NextQueryRequest
Ancak bu işe yarayacaktır, çünkü QueryResult'un ek açıklamaya eklenmesine izin veriyorsunuz.
@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 bunun neden olduğunu bir örnekle açıkladı.
Ayrıca, bir geçici çözüm arayan herkes bu yanıtı yukarıda belirtilen @Michiel olarak okumalıdır.https://stackoverflow.com/a/40861154/2148365