2016-05-22 7 views
2

Ich habe HttpServletRequest mit der @Context innerhalb meiner Ressourcenklasse erfolgreich injiziert.Wie injiziere ich HttpServletRequest in eine Nicht-Ressourcenklasse?

Ist es möglich, HttpServletRequest in eine Nicht-Ressourcenklasse zu injizieren? Ich habe eine Klasse erstellt, die verschiedene Netzwerkoperationen durchführt, für die Werte erforderlich sind, die in HttpSession gespeichert sind. Zum Beispiel ...

public class RequestExecutor { 

    @Context 
    HttpServletRequest request; 

    public Response performNetworkRequest(Request request) { 

     // Do network request - I want to access the session without passing the session object around my code everywhere. 
     return response; 
    } 
} 

Ist das möglich?

+1

JAX-RS und HTTP-Sitzung. Etwas sieht falsch aus. –

+1

JAX-RS soll zum Erstellen von REST-Anwendungen verwendet werden. Das heißt, Anwendungen, die keine HTTP-Sitzung verwenden. –

+1

Wie auch immer, machen Sie Ihre non-resource Klasse zu einer CDI Bean (kommentieren Sie sie zum Beispiel mit '@ RequestScope') und benutzen Sie' @ Inject' um die 'HttpServletRequest' zu injizieren. –

Antwort

1

Sie können nicht @Context verwenden, finden Sie JSR-311 für JAX-RS 1.1 und JSR-339 für JAX-RS 2.0:

JAX-RS bietet die Möglichkeit für den Erhalt und die Verarbeitung von Informationen über die Anwendungsbereitstellung Kontext und Kontext von individuellen Anfragen. Solche Informationen stehen Application Unterklassen (siehe Abschnitt 2.1), Wurzelressourcenklassen (siehe Kapitel 3) und Anbietern (siehe Kapitel 4) zur Verfügung.

Sie können auch Subresourcen initialisieren:

Die ResourceContext Schnittstelle ermöglicht den Zugriff auf Instantiierung und Initialisierung der Ressource oder subresource Klassen in der Standard-pro-Request-Scope. Es kann eingefügt werden, um bei der Erstellung und Initialisierung oder nur Initialisierung von Instanzen zu helfen, die von einer Anwendung erstellt werden.

Siehe auch: ResourceContext#initResource

Aber man könnte Vererbung:

public abstract class AbstractResource { 

    @Context 
    HttpServletRequest request; 

    protected Response performNetworkRequest() { 
     // do something with request 
    } 
} 

@Path("myResource") 
public class MyResource extends AbstractResource { 
    // some methods 
}