11.4.4 HTTPヘッダの設定
クライアントAPIには,HTTPリクエストオブジェクトにHTTPヘッダを設定するためのさまざまなメソッドを提供しています。サポートしているメソッドの詳細については「25.1 クライアントAPIのインタフェースおよびクラスのサポート範囲」を参照してください。なお,この説明でのHTTPリクエストオブジェクトとは,次のどちらかを指します。
-
WebResourceオブジェクトまたはClientRequestオブジェクト
-
WebResource.BuilderオブジェクトまたはClientRequest.Builderオブジェクト
HTTPリクエストオブジェクトには,HTTPヘッダと対応する値を保持するMultivaluedMapオブジェクトが含まれています。
HTTPヘッダを保持するMultivaluedMapオブジェクトがどのように初期化されるのかを次の図で説明します。
この図では,ユーザプログラムはClientRequestクラスのcreate()スタティックメソッドまたはClientクラスのresource()メソッドを使用してHTTPリクエストオブジェクトを生成しています。
この場合,MultivaluedMapオブジェクトは空の状態で初期化されます。
MultivaluedMapオブジェクトにHTTPヘッダを設定する例を次の図に示します。
- 例1
- 例2
- 例3
- 例4
例1〜例4のどの方法でも,ユーザプログラムは,"text/xml"と"text/plain"を値とするAccept HTTPヘッダを持つHTTPリクエストオブジェクトを生成できます。Accept-Language HTTPヘッダとCookie HTTPヘッダについても同様です。なお,Accept-Language HTTPヘッダとCookie HTTPヘッダの場合はacceptメソッドをそれぞれacceptLanguage()メソッドまたはcookie()メソッドに読み替えてください。
Content-Type HTTPヘッダの場合,例1と例3の動作は次に示すとおりになります。
- 例1
- 例3
どちらの場合でも,HTTPリクエストオブジェクトに設定されるContent-Type HTTPヘッダの値は"text/plain"です。なお,Content-Type HTTPヘッダは値を一つしか持てないため,例2と例4の方法は利用できません。
HTTP通信に先立って,HTTPリクエストオブジェクトに追加されたすべてのHTTPヘッダとその値は,HttpURLConnectionオブジェクトに設定されます。仕組みを次の図で説明します。
それぞれのHTTPヘッダには,HTTPリクエストオブジェクトに含まれる対応するHTTPヘッダの値が設定されます。なお,この場合,HTTPリクエストオブジェクトに含まれる対応するHTTPヘッダの値がnullでなければ,toString()メソッドの戻り値に設定されます。JAX-RSエンジンはHTTPヘッダの値を検証しません。標準仕様に従ってHTTPヘッダの値をHTTPリクエストオブジェクトに設定してください。
なお,HTTP通信を行うまでに,特定のHTTPヘッダをHTTPリクエストオブジェクトに設定しなかった場合の動作は,HTTPヘッダをHttpURLConnectionオブジェクトに設定しなかった場合と同様です。