web-dev-qa-db-ja.com

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"を取得したいと思います。リフレクションを使用してどうすればよいですか?

28
Darek

@Pathパラメーターの値を取得するには:

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

同様に、MethodgetHtmlを保持したら

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

注釈はインターフェイスロジックに基づいています。値を取得するには、その有効なメンバーを呼び出す必要があります。

定義

_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());
}
_

はい。メソッド定義にアクセスするには、リフレクションを使用する必要があります。 Class#MgetMethods() を使用して、メソッドの定義を取得できます。

オブジェクトの場合、obj.getClass()を呼び出してクラス定義を取得します。