Obtention des en-têtes HTTP en utilisant des objets HttpHeaders
En utilisant Java™ API for RESTful Web Services (JAX-RS), vous pouvez utiliser l'objet HttpHeaders pour accéder aux en-têtes de demande.
Pourquoi et quand exécuter cette tâche
En utilisant un objet HttpHeaders injecté avec l'environnement d'exécution JAX-RS, les informations d'en-tête de requête HTTP sont connues et disponibles pour être modifiées. L'annotation @javax.ws.rs.core.Context indique qu'un objet de contexte est injecté. L'interface javax.ws.rs.core.HttpHeaders est l'interface de l'objet à injecter.
Procédure
Résultats
La méthode de ressource utilise les informations des en-têtes HTTP envoyées dans la demande pour déterminer une réponse appropriée.
Exemple
L'exemple suivant montre une ressource qui retourne un message d'accueil différent en fonction de la valeur de l'en-tête Accept-Language.
Dans le fragment de code suivant, le paramètre @Context HttpHeaders est ajouté à la signature de méthode. Notez que l'annotation @Context et la déclaration de type se trouvent dans la liste des paramètres de la méthode 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 Retourne la chaîne dans la langue préférée.
*/
@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!";
}
}
}
Vous pouvez également déclarer la propriété @Context HttpHeaders httpHeaders sous la forme d'une zone dans la classe, par exemple :
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 Retourne la chaîne dans la langue préférée.
*/
@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!";
}
}
}