52.2.3. URI テンプレート変数の値の取得
概要
「パスの設定」 で説明されているように、リソースパスには、値に動的にバインドされた変数セグメントを含めることができます。多くの場合、これらの変数パスセグメントは、「URI のパスからのデータ取得」 で説明されているリソースメソッドへのパラメーターとして使用されます。ただし、URI コンテキストを使用してそれらにアクセスすることもできます。
パスパラメーターを取得する方法
UriInfo インターフェイスは、(例52.1「URI コンテキストからパスパラメーターを返すメソッド」 のように) パスパラメーターの一覧を返す 2 つのメソッドを提供します。
例52.1 URI コンテキストからパスパラメーターを返すメソッド
MultivaluedMap<java.lang.String, java.lang.String>
getPathParameters
MultivaluedMap<java.lang.String, java.lang.String>
getPathParameters
boolean
decode
パラメーターを取らない getPathParameters()
メソッドは、パスパラメーターを自動的にデコードします。URI のデコードを無効にする場合は、getPathParameters(false)
を使用します。
値は、テンプレート識別子をキーとして使用してマップに保存されます。たとえば、リソースの URI テンプレートが /{color}/box/{note} の場合、返されるマップには color
キーと note
キーを持つ 2 つのエントリーがあります。
例
例52.2「URI コンテキストからのパスパラメーターの抽出」 は、URI コンテキストを使用してパスパラメーターを取得するためのコードを示しています。
例52.2 URI コンテキストからのパスパラメーターの抽出
import javax.ws.rs.Path; import javax.ws.rs.Get; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; @Path("/monstersforhire/") public class MonsterService @GET @Path("/{type}/{size}") public Monster getMonster(@Context UriInfo uri) { MultivaluedMap paramMap = uri.getPathParameters(); String type = paramMap.getFirst("type"); String size = paramMap.getFirst("size"); } }