Sto scrivendo un'API REST, facendo uso di RestEasy 2.3.4.Final. So che un Interceptor intercetterà tutte le mie richieste e che un PreProcessInterceptor sarà il primo (prima di tutto) a essere chiamato. Mi piacerebbe sapere come posso fare in modo che questo Interceptor venga chiamato solo quando vengono chiamati metodi specifici.Come utilizzare RESTEasy PreProcessInterceptor solo in metodi specifici?
Ho provato a utilizzare sia PreProcessInterceptor che AcceptedByMethod, ma non sono riuscito a leggere i parametri di cui ho bisogno. Per esempio, ho bisogno di eseguire il mio Interceptor solo quando questo metodo viene chiamato:
@GET
@Produces("application/json;charset=UTF8")
@Interceptors(MyInterceptor.class)
public List<City> listByName(@QueryParam("name") String name) {...}
Per essere più precisi, ho bisogno di eseguire il mio Interceptor in tutti i metodi di cui avere un @QueryParam("name")
sulla sua firma, così posso prendere il nome e fare qualcosa prima di tutto.
È possibile? Ho provato a prendere il parametro "name" all'interno dell'Interceptor, ma non ero in grado di farlo.
Qualcuno potrebbe aiutarmi, per favore?
Thankyou @eiden. L'ho provato prima, ma senza usare '@ Context'. Ma, quando provo a recuperare alcuni dati dal contesto iniettato, genera un'eccezione perché il contesto non è stato inizializzato, immagino. org.apache.catalina.core.ContainerBase. [Jboss.web]. [Default-host]. [/ Api]] (thread di servizio MSC 1-3) Exception sending context initialized event to listener instance of class org.jboss .resteasy.plugins.server.servlet.ResteasyBootstrap: org.jboss.resteasy.spi.LoggableFailure: impossibile trovare i dati contestuali di tipo: javax.servlet.http.HttpServletRequest – pulu
Non so perché stai usando @Context? Ad ogni modo, ho aggiornato la mia risposta con un esempio di codice – eiden
Excelent @eiden. Ho quasi capito che funzionava in quel modo, ma non mi ero reso conto che if (annotation.annotationType() == QueryParam.class) { QueryParam queryParam = (QueryParam) annotazione; return queryParam.value(). Equals ("name"); ' Molte grazie per avermi aiutato! E spero che aiuti altre persone. – pulu