如何在Java中获取字段的注释

Dod*_*FXP 1 java reflection serialization annotations jackson

我有自己的注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Template {
   Class target();
}
Run Code Online (Sandbox Code Playgroud)

这个注解用在一个简单的 POJO 中:

public class Something {   
    @JsonSerialize(using = TemplateSerializer.class)
    @Template(target = PersonRepresentation.class)
    private TemplateFoo address = new TemplateFoo() {};
}
Run Code Online (Sandbox Code Playgroud)

我有 Jackson seriliazer TemplateSerializer,它在将对象序列化为 JSON 时传递“地址”。

我想知道如何在给定“地址”实例的情况下获得 @Template 注释?我想获取它的“目标”字段,然后检查 PersonRepresentation.class

Sot*_*lis 5

您需要先访问address Field.

Field address = Something.class.getField("address");
Template annotation = address.getAnnotation(Template.class);
Run Code Online (Sandbox Code Playgroud)

然后就可以得到target注解的字段

Class clazz = annotation.target();
Run Code Online (Sandbox Code Playgroud)

正如 JB Nizet 所评论的那样,注释中提供的信息与类相关,而不是与实例相关。