Wie zu verwenden RESTEasy PreProcessInterceptor nur in bestimmten Methoden?
Schreibe ich eine REST-API, die Nutzung von RestEasy 2.3.4.Endgültig.
Ich weiß, dass ein Interceptor fängt alle meine Wünsche, und dass ein PreProcessInterceptor wird die erste (vor allem) genannt werden. Ich würde gerne wissen, wie kann ich das Interceptor aufgerufen werden, nur, wenn bestimmte Methoden aufgerufen werden.
Habe ich versucht, beide zu verwenden PreProcessInterceptor und AcceptedByMethod, aber ich war nicht in der Lage zu Lesen, die Parameter, die ich brauche.
Zum Beispiel, ich brauche, um mein Interceptor nur, wenn diese Methode aufgerufen wird:
@GET
@Produces("application/json;charset=UTF8")
@Interceptors(MyInterceptor.class)
public List<City> listByName(@QueryParam("name") String name) {...}
Um genauer zu sein, ich brauche, um mein Interceptor in allen Methoden, deren eine @QueryParam("name")
auf seine Signatur, so dass ich ergreifen können, den Namen und etwas tun, bevor alles.
Ist es möglich? Ich habe versucht zu fangen, die "name" - parameter innerhalb der Interceptor, aber ich war nicht in der Lage, das zu tun.
Könnte mir jemand helfen, bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
AcceptedByMethod
wie in der RESTEasy DokumentationErstellen Sie eine Klasse, die Umsetzung
PreProcessInterceptor
undAcceptedByMethod
. In deraccept
-Methode können Sie überprüfen, ob die Methode hat einen parameter mit kommentierten mit@QueryParam("name")
. Wenn das Methode hat, dass die annotation true zurück, aus deraccept
-Methode.In der
preProcess
-Methode, können Sie den query-parameter ausrequest.getUri().getQueryParameters().getFirst("name")
.EDIT:
Hier ist ein Beispiel:
@Context
. Aber, wenn ich versuchen, abrufen von Daten aus dem injizierten Kontext, wirft er eine Exception, weil der Zusammenhang wurde nicht initialisiert, denke ich. org.apache.catalina.core.ContainerBase.[jboss.web].[Standard-host].[/api]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.resteasy.plugins.server.- servlet.ResteasyBootstrap: org.jboss.resteasy.spi.LoggableFailure: Unable to find kontextuellen Daten Typ: javax.- servlet.http.HttpServletRequestif(annotation.annotationType() == QueryParam.class){ QueryParam queryParam = (QueryParam) annotation; return queryParam.value().equals("name");
Vielen Dank für die Hilfe! Und ich hoffe, es hilft ein paar Leute mehr.annotation.annotationType()
ist eine klassische java 'gotcha' 🙂wenn Sie zurück
return new ServerResponse(responseText, 200, new Headers<Object>());
verlieren Sie den end-Punkt. Sie müssen zurücknull
wenn Sie immer noch wollen, dass die Nachricht an die Letzte Stelle.