Springboot'ta @RequestBody için meta not oluşturulamıyor

Aug 15 2020

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

1 DanielJacob Aug 16 2020 at 02:15

@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
isuru89 Aug 16 2020 at 10:19

@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