Obtenir la valeur d'un paramètre d'une annotation en Java

J'ai donc un code:

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

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

J'utilise AspectJ pour attraper tous les appels à la méthode getHtml. Je voudrais obtenir les paramètres passés à @Produces et de @Path, à mon avis, c'est à dire "/foo" et "text/html" dans ce cas. Comment puis-je le faire en utilisant la réflexion ?

24
demandé sur Darek 2013-11-25 16:00:59

2 réponses

Pour obtenir la valeur du paramètre @Path:

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

De même, une fois que vous avez la main sur Method getHtml

Method m = Hello.class.getMethod("getHtml", ..);
String mime = m.getAnnotation(Produces.class).value;
28
répondu harsh 2015-09-16 14:58:41

L'annotation est basée sur la logique de l'interface. Vous devez appeler le membre valide pour récupérer la valeur.

Définition

public @interface Produces {
 String type();
}

Lire l'exemple

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

Oui. Vous devez utiliser reflection pour accéder à la définition de méthode. Vous pouvez utiliser Classe#MgetMethods() pour obtenir la définition de la méthode

Pour l'objet, vous appelez obj.getClass() pour obtenir la définition de la classe.

4
répondu Damian Leszczyński - Vash 2013-11-25 12:06:37