Wie kann ich Ressourcenanmerkungen in einem Jersey ContainerResponseFilter erhalten?

9

Jersey bietet zwei Klassen für die Interaktion mit Anmerkungen zu Ressourcen:

ResourceFilterFactory definiert eine create -Methode (zur Implementierung), die ein AbstractMethod verwendet, das den Zugriff auf Methoden- und Klassenanmerkungen ermöglicht.

ContainerRequestFilter und ContainerResponseFilter definieren eine filter -Methode (zur Implementierung), die Anfrage / Antwort übernimmt, aber diese gibt nur Zugriff auf die Annotation der aufgerufenen Methode, nicht die Klasse eins.

Ich versuche, eine CacheControl-Annotation zu implementieren, die HTTP-Cache-Header folgendermaßen definiert.

%Vor%

Mein Problem ist, dass ich keinen neuen CacheControlFilter für jede REST-Methode erstellen möchte, die in meiner Anwendung definiert ist .

%Vor%

Gibt es eine Möglichkeit, auf AbstractMethod zuzugreifen, ohne einen CacheContronlFilter für jede REST-Methode zu projektieren?

%Vor%     
yves amsellem 29.11.2011, 17:37
quelle

1 Antwort

4

Warum ist es wichtig, keine separate Instanz des Filters für jede anwendbare Methode zu haben? Es kann eine Vielzahl von gleichzeitigen Zugriffen geben. Wenn Sie also nicht möchten, dass es sich um separate Instanzen handelt, müssten sie veränderbar sein und Sie müssten in die threadlocals-Verwirrung geraten (um die derzeit für den gegebenen Thread anwendbare abstrakte Methode zu speichern) ). Nicht sicher, ob du das wirklich willst. Ein separates Objekt für jeden ist nicht so teuer.

UPDATE: Beachten Sie auch, dass Sie keine neue Instanz für jede -Methode erstellen möchten. Sie möchten es nur für Methoden mit einer @CacheControl Annotation tun, die an sie oder an ihre Ressourcen angehängt ist, oder? Sie können auch Filterinstanzen für allgemeine @CacheControl-Werte freigeben - d. H. Wenn eine Methode die gleiche Cache-Steuereinstellung wie eine andere Methode verwendet, können Sie den gleichen Filter dafür verwenden, falls nicht, erstellen Sie eine separate Instanz des Filters für diese Methode. Mit anderen Worten - Sie können einen Filter pro einzelne Cache-Control-Einstellung im Gegensatz zu einem Filter pro Methode haben, da Sie die Methode nicht wirklich interessieren - Sie interessieren sich für die Anmerkungen, die an sie angehängt werden.

    
Martin Matula 01.12.2011, 21:37
quelle

Tags und Links