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 ?
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;
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.