web-dev-qa-db-fra.com

Récupère la valeur d'un paramètre d'une annotation dans 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 intercepter tous les appels à la méthode getHtml. Je souhaite que les paramètres soient passés à @Produces et à @Path dans mes conseils, c'est-à-dire "/foo" et "text/html" dans ce cas. Comment puis-je le faire en utilisant la réflexion?

28
Darek

Pour obtenir la valeur de @Path paramètre:

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

De même, une fois que vous avez en main MethodgetHtml

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

L'annotation est basée sur la logique d'interface. Vous devez en 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 la réflexion pour accéder à la définition de méthode. Vous pouvez utiliser Class # MgetMethods () pour obtenir la définition de la méthode

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