Подтвердить что ты не робот

Получить значение параметра аннотации в Java

Итак, у меня есть код:

@Path("/foo")
public class Hello {

@GET
@Produces("text/html")
public String getHtml(@Context Request request, @Context HttpServletRequest requestss){
  ...
}

Я использую AspectJ, чтобы поймать все вызовы метода getHtml. Я хотел бы получить параметры, переданные в @Produces и @Path в моем совете, т.е. "/foo" и "text/html" в этом случае. Как я могу сделать это с помощью отражения?

4b9b3361

Ответ 1

Чтобы получить значение параметра @Path:

String path = Hello.class.getAnnotation(Path.class).value();

Аналогично, если у вас есть Method getHtml

Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;

Ответ 2

Аннотация основана на логике интерфейса. Чтобы получить значение, вам нужно вызвать действительный член.

Определение

public @interface Produces {
 String type();
}

Пример чтения

for (Method m: SomeClass.class.getMethods() {
   Produces produce = m.getAnnotation(Produces.class);
   if (produce != null)
       System.out.println(produce.type());
}

Да. Вы должны использовать отражение для доступа к определению метода. Вы можете использовать класС# MgetMethods(), чтобы получить определение метода

Для объекта вы вызываете obj.getClass(), чтобы получить определение класса.