2016-05-22 2 views
2

私はを自分のリソースクラスの内側に入れて、HttpServletRequestを正常に注入しました。HttpServletRequestを非リソースクラスに挿入するには?

HttpServletRequestを非リソースクラスに注入することはできますか? HttpSessionの中に格納された値を必要とするさまざまなネットワーク操作を実行するクラスを作成しました。たとえば...

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; 
    } 
} 

これは可能ですか?

+1

JAX-RSおよびHTTPセッションを。何かが間違っています。 –

+1

JAX-RSは、RESTアプリケーションの作成に使用されるはずです。つまり、HTTPセッションを使用しないアプリケーションです。 –

+1

とにかく、あなたの非リソースクラスをCDI Beanにします(例えば '@ RequestScope'で注釈をつける)。' @Inject'を使って 'HttpServletRequest'を注入します。 –

答えて

1

あなたはJAX-RS 2.0のためのJAX-RS 1.1のためのJSR-311JSR-339参照、@Contextを使用することはできません。

JAX-RSアプリケーションの配備コンテキストおよびコンテキスト情報を取得して処理するための機能を提供します個々の要求のそのような情報は、サブクラス(2.1節参照)、ルートリソースクラス(第3章参照)、プロバイダ(第4章を参照)で利用できます(Application参照)。

また、サブリソースを初期化することができます

ResourceContextインターフェイスは、デフォルト要求ごとのスコープでリソースまたはサブリソース クラスのインスタンス化と初期化へのアクセスを提供します。これは、アプリケーションによって作成されたインスタンスの作成と初期化、 または単に初期化を助けるために注入することができます。 ResourceContext#initResource

しかし、あなたは、継承を使用できます:

も参照してください

public abstract class AbstractResource { 

    @Context 
    HttpServletRequest request; 

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

@Path("myResource") 
public class MyResource extends AbstractResource { 
    // some methods 
} 
関連する問題