Получить значение параметра аннотации в 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"
в этом случае. Как я могу сделать это с помощью отражения?
Ответы
Ответ 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()
, чтобы получить определение класса.