Menu Close

52.2.2. URI の使用

概要

URI コンテキストを使用する主な利点の 1 つは、サービスのベース URI と、選択したリソースの URI のパスセグメントにアクセスできることです。この情報は、URI に基づく処理の決定や応答の一部として返す URI の計算など、数多くの目的に便利です。たとえば、リクエストのベース URI に .com 拡張子が含まれる場合、サービスは米ドルの使用を決定できます。また、ベース URI に .co.uk 拡張子が含まれる場合は、英国ポンドの使用を決定できます。

UriInfo インターフェースは、URI の一部にアクセスするためのメソッドを提供します。

  • ベース URI
  • リソースパス
  • 完全な URI

ベース URI の取得

ベース URI は、サービスがパブリッシュされるルート URI です。サービスの @Path アノテーションで指定された URI の一部は含まれません。たとえば、例47.5「URI デコードの無効化」 で定義されたリソースを実装するサービスが http://fusesource.org に公開され、リクエストが http://fusesource.org/montersforhire/nightstalker?12 で行われた場合、ベース URI は http://fusesource.org になります。

表52.2「リソースのベース URI にアクセスするためのメソッド」 では、ベース URI を返すメソッドについて説明します。

表52.2 リソースのベース URI にアクセスするためのメソッド

メソッド説明

URIgetBaseUri

サービスのベース URI を URI オブジェクトとして返します。

UriBuildergetBaseUriBuilder

ベース URI を javax.ws.rs.core.UriBuilder オブジェクトとして返します。UriBuilder クラスは、サービスによって実装された他のリソースの URI を作成するのに役立ちます。

パスの取得

リクエスト URI の パス 部分は、現在のリソースの選択に使用された URI の一部です。ベース URI は含まれませんが、URI に含まれる URI テンプレート変数およびマトリックスパラメーターが含まれます。

パスの値は、選択したリソースによって異なります。たとえば、リソースのパスの取得 で定義されるリソースのパスは以下のようになります。

  • rootPath/monstersforhire/
  • getterPath/mostersforhire/nightstalker

    GET リクエストは /monstersforhire/nightstalker で実行されました。

  • putterPath/mostersforhire/911

    PUT リクエストは /monstersforhire/911 で実行されました。

リソースのパスの取得

@Path("/monstersforhire/")
public class MonsterService
{
  @Context
  UriInfo rootUri;

  ...

  @GET
  public List<Monster> getMonsters(@Context UriInfo getUri)
  {
    String rootPath = rootUri.getPath();
    ...
  }

  @GET
  @Path("/{type}")
  public Monster getMonster(@PathParam("type") String type,
                            @Context UriInfo getUri)
  {
    String getterPath = getUri.getPath();
    ...
  }

  @PUT
  @Path("/{id}")
  public void addMonster(@Encoded @PathParam("type") String type,
                         @Context UriInfo putUri)
  {
    String putterPath = putUri.getPath();
    ...
  }
  ...
}

表52.3「リソースのパスにアクセスするためのメソッド」 では、リソースパスを返すメソッドについて説明します。

表52.3 リソースのパスにアクセスするためのメソッド

メソッド説明

StringgetPath

デコードされた URI としてリソースのパスを返します。

StringgetPathbooleandecode

リソースのパスを返します。false を指定すると、URI のデコードが無効になります。

List<PathSegment>getPathSegments

デコードされたパスを javax.WS.rs.core.pathSegment オブジェクトのリストとして返します。マトリックスパラメーターを含むパスの各部分は、リストの一意のエントリーに配置されます。

たとえば、リソースパス box/round#tall の場合は、boxround、および tall の 3 つのエントリーのリストになります。

List<PathSegment>getPathSegmentsbooleandecode

パスを javax.WS.rs.core.pathSegment オブジェクトのリストとして返します。マトリックスパラメーターを含むパスの各部分は、リストの一意のエントリーに配置されます。false を指定すると、URI のデコードが無効になります。

たとえば、リソースパス box#tall/round の場合は、boxtall、および round の 3 つのエントリーのリストになります。

完全な要求 URI の取得

表52.4「完全なリクエスト URI にアクセスするためのメソッド」 では、完全なリクエスト URI を返すメソッドについて説明します。リクエスト URI またはリソースの絶対パスを返すオプションがあります。違いは、リクエスト URI には URI に追加されたクエリーパラメーターが含まれ、絶対パスにはクエリーパラメーターが含まれていないことです。

表52.4 完全なリクエスト URI にアクセスするためのメソッド

メソッド説明

URIgetRequestUri

クエリーパラメーターおよびマトリックスパラメーターを含む完全なリクエスト URI を java.net.URI オブジェクトとして返します。

UriBuildergetRequestUriBuilder

クエリーパラメーターおよびマトリックスパラメーターを含む完全なリクエスト URI を javax.ws.rs.UriBuilder オブジェクトとして返します。UriBuilder クラスは、サービスによって実装された他のリソースの URI を作成するのに役立ちます。

URIgetAbsolutePath

マトリックスパラメーターを含む完全なリクエスト URI を java.net.URI オブジェクトとして返します。絶対パスにはクエリーパラメーターは含まれません。

UriBuildergetAbsolutePathBuilder

マトリックスパラメーターを含む完全なリクエスト URI を javax.ws.rs.UriBuilder オブジェクトとして返します。絶対パスにはクエリーパラメーターは含まれません。

URI http://fusesource.org/montersforhire/nightstalker?12 を使用して行われるリクエストの場合は、getRequestUri() メソッドは http://fusesource.org/montersforhire/nightstalker?12 を返します。getAbsolutePath() メソッドは http://fusesource.org/montersforhire/nightstalker を返します。