LoginSignup
0
2

More than 5 years have passed since last update.

JAX-RS + RESTEasy で @Context で DI 可能なコンポーネントを自作する

Last updated at Posted at 2017-05-30

@Context アノテーションで自作コンポーネントを DI 可能にするための方法です。

JAX-RS に準拠した Web アプリケーションで, HttpServletRequest や HttpServletResponse オブジェクトを使用したいときは, @Context アノテーションを使って以下のようにするのが一般的です。

@Context
private HttpServletRequest httpServletRequest;

こうすることで,実行時には httpServletRequest にオブジェクトが格納された状態で使用可能になります。

こういった使い方ができるのは他に以下のようなものがあります。

  • javax.ws.rs.container.ContainerRequestContext
  • javax.ws.rs.container.ResourceContext
  • javax.ws.rs.core.Application
  • javax.ws.rs.core.HttpHeaders
  • javax.ws.rs.core.Request
  • javax.ws.rs.core.SecurityContext
  • javax.ws.rs.core.UriInfo
  • javax.ws.rs.core.Configuration
  • javax.ws.rs.ext.Providers
  • javax.servlet.HttpServletRequest
  • javax.servlet.HttpServletResponse
  • javax.servlet.ServletConfig
  • javax.servlet.ServletContext

では,これを自作するにはどうしたらいいのでしょうか。JAX-RS の実装に RESTEasy を使っているのなら,以下の方法で簡単にできます。

(1)
MyClass myObject = createMyObject();

Map<Class<?>, Object> contextDataMap = ResteasyProviderFactory.getContextDataMap();
contextDataMap.put(MyClass.class, myObject);

使うときは,次の通りです。

(2)
@Context
private MyClass myObject;

例えば, (1) をフィルターで行い, (2) をコントローラーで利用するといった使い方ができますね。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2