Springboot'ta @RequestBody için meta not oluşturulamıyor
Aşağıda gösterildiği gibi @QueryRequestBaharlar 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 @Targettürü doğrulamamı söylüyor . Her neyse, benim @Targetve @Retentiondeğ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.METHODVeya ElementType.TYPEtü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 @RequestBodyile @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