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 インターフェースは、注入対象となるオブジェクトのインターフェースです。
手順
タスクの結果
リソース・メソッドでは、要求で送信された 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!";
}
}
}