Comment utiliser RESTEasy PreProcessInterceptor seulement dans des méthodes spécifiques?
Je suis en train d'écrire une API REST, faisant usage de RestEasy 2.3.4.Final.
Je sais qu'un Intercepteur d'intercepter toutes mes demandes, et qu'un PreProcessInterceptor sera le premier (avant tout) pour être appelé. Je voudrais savoir comment puis-je faire de cet Intercepteur d'être appelé juste au moment où des méthodes spécifiques sont appelés.
J'ai essayé d'utiliser à la fois PreProcessInterceptor et AcceptedByMethod, mais je n'étais pas en mesure de lire les paramètres dont j'ai besoin.
Par exemple, j'ai besoin de mon Intercepteur seulement lorsque cette méthode est appelée:
@GET
@Produces("application/json;charset=UTF8")
@Interceptors(MyInterceptor.class)
public List<City> listByName(@QueryParam("name") String name) {...}
Pour être plus précis, j'ai besoin d'exécuter mon Intercepteur de toutes les méthodes qui ont un @QueryParam("name")
sur sa signature, de sorte que je peux récupérer le nom et faire quelque chose avant tout.
Est-il possible? J'ai essayé de rattraper le paramètre "name" à l'intérieur de l'Intercepteur, mais je n'étais pas en mesure de le faire.
Quelqu'un pourrait-il m'aider, s'il vous plaît?
OriginalL'auteur pulu | 2012-07-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
AcceptedByMethod
comme expliqué dans la RESTEasy documentationCréer une classe qui oeuvre à la fois
PreProcessInterceptor
etAcceptedByMethod
. Dans leaccept
-méthode, vous pouvez vérifier si la méthode a un paramètre avec annoté avec@QueryParam("name")
. Si la méthode a cette annotation, de retour véritable de laaccept
-méthode.Dans le
preProcess
-méthode, vous pouvez obtenir le paramètre de requête derequest.getUri().getQueryParameters().getFirst("name")
.EDIT:
Voici un exemple:
@Context
. Mais, lorsque j'essaie de récupérer des données à partir de l'injection de contexte, il déclenche une Exception, car le contexte n'a pas été initialisé, je suppose. org.apache.catalina.de base.ContainerBase.[jboss.web].[par défaut de l'hôte].[api]] (MSC thread de service 1-3) à l'Exception de l'envoi de contexte initialisé événement à l'auditeur instance de la classe org.jboss.resteasy.les plugins.serveur.servlet.ResteasyBootstrap: org.jboss.resteasy.le spi.LoggableFailure: Impossible de trouver des données contextuelles de type: javax.servlet.http.HttpServletRequestJe ne sais pas pourquoi vous utilisez @Contexte? De toute façon, j'ai mis à jour ma réponse avec un exemple de code
Excelent @eiden. J'ai presque eu de travail de cette façon, mais je n'ai pas réalisé
if(annotation.annotationType() == QueryParam.class){ QueryParam queryParam = (QueryParam) annotation; return queryParam.value().equals("name");
Merci Beaucoup de m'aider! Et j'espère que cela aidera certains à plus de gens.Vous êtes les bienvenus!
annotation.annotationType()
est un classique java "chasse aux sorcières' 🙂OriginalL'auteur eiden
si vous retournez
return new ServerResponse(responseText, 200, new Headers<Object>());
vous perdrez le point final. vous avez besoin de retournernull
si vous souhaitez que le message soit remis vers le point final.OriginalL'auteur Sir GG