HttpHeaders オブジェクトを使用した HTTP ヘッダーの取得

Java™ API for RESTful Web Services (JAX-RS) では、HttpHeaders オブジェクトを使用して要求ヘッダーにアクセスできます。

このタスクについて

JAX-RS ランタイム環境に注入された HttpHeaders オブジェクトを使用すると、HTTP 要求ヘッダー情報が認識され、変更することができます。@javax.ws.rs.core.Context アノテーションは、コンテキスト・オブジェクトが注入されたことを示します。javax.ws.rs.core.HttpHeaders インターフェースは、注入対象となるオブジェクトのインターフェースです。

手順

  1. メソッド・シグニチャーが変更可能かどうかを判別します。 JAX-RS 固有のリソース・メソッドを作成済みの場合は、 このメソッドにはメソッド・シグニチャーに関する制約はないため、通常は簡単にリソース・メソッド・シグニチャーの変更とパラメーターの追加を 行うことがでます。 ただし、JAX-RS リソース・メソッドを開発したときに、コードを再利用し、 既存のクラスおよびメソッドを採用して JAX-RS 機能を追加した場合は、 そのメソッドを呼び出す、以前から存在しているコードによって、メソッド・シグニチャー に関する制約がある場合があります。このようなケースでは、 メソッド・シグニチャーを変更できない場合があります。
  2. リソース・メソッド・シグニチャーが変更可能な場合、 @javax.ws.rs.core.Context アノテーションを付けた javax.ws.rs.core.HttpHeaders パラメーターを メソッドに追加します。 リソース・メソッドが呼び出されると、JAX-RS ランタイム環境は HttpHeaders オブジェクトを実装するオブジェクトを渡します。例:
    @Path("/contextexample")
    public class RootResource {
        @GET
            public String getResource(@Context HttpHeaders httpHeaders) {
                    /* This calls a method on httpHeaders. */
                    return "The client sent a header value of " + headers.getRequestHeaders().getFirst("CustomHeader") + " for CustomHeader";
        }
    }
  3. リソース・メソッド・シグニチャーが変更可能でなく、 クラスがルート・リソースである場合、@javax.ws.rs.core.Context アノテーションを付けた javax.ws.rs.core.HttpHeaders フィールド をクラスに追加します。 リソースが要求に対してインスタンス化されると、HttpHeaders を実装するオブジェクトが注入されます。例:
    @Path("/contextexample")
    public class RootResource {
    
        @Context
        HttpHeaders httpHeaders;
    
        @GET
        public String getResource() {
                    /* This calls a method on httpHeaders. */
                    return "The client sent a header value of " + headers.getRequestHeaders().getFirst("CustomHeader") + " for CustomHeader";
        }
    }

タスクの結果

リソース・メソッドでは、要求で送信された HTTP ヘッダーからの情報を使用して適切な応答が判断されます。

次の例では、Accept-Language ヘッダーの設定に合わせて異なる挨拶文を戻すリソースを示します。

次のコード・スニペットでは、@Context HttpHeaders パラメーターがメソッド・シグニチャーに追加されています。@Context アノテーションおよび型宣言は、getGreeting メソッドのパラメーター・リストに入っています。
import java.util.List;
import java.util.Locale;
 import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import   javax.ws.rs.core.MediaType;
 @Path("/contexttest")
public class HelloWorldInMyLanguage {

    /**
     *   @return Returns the string in the preferred language.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getGreeting(@Context HttpHeaders httpHeaders) {
        List<Locale> locales = httpHeaders.getAcceptableLanguages();

        if (locales.size() == 0) {
            return "Hello!";
        }

        Locale locale = locales.get(0);
        if (locale.equals(Locale.FRENCH)) {
            return "Bonjour!";
        } else if (locale.equals(Locale.GERMAN)) {
            return "Guten Tag!";
        } else {
            return "Hello!";
        }
    }
} 
代わりに、@Context HttpHeaders httpHeaders プロパティーをクラスのフィールドとして宣言することもできます。例:
import java.util.List;
import java.util.Locale;
 import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import   javax.ws.rs.core.MediaType;
 @Path("/contexttest")
public class HelloWorldInMyLanguage {

    @Context
    HttpHeaders httpHeaders;

    /**
     * @return Returns the string in the preferred language.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getGreeting() {
        List<Locale> locales = httpHeaders.getAcceptableLanguages();

        if (locales.size() == 0) {
            return "Hello!";
        }

        Locale locale = locales.get(0);
        if (locale.equals(Locale.FRENCH)) {
            return "Bonjour!";
        } else if (locale.equals(Locale.GERMAN)) {
            return "Guten Tag!";
        } else {
            return "Hello!";
        }
    }
}

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_contextobjects_httpheaders
ファイル名:twbs_jaxrs_contextobjects_httpheaders.html