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

  1. Déterminez si la signature de votre méthode peut être modifiée. Si vous avez créé une méthode de ressource JAX-RS spécifique, vous pouvez habituellement modifier sa signature et ajouter des paramètres facilement, car la méthode n'impose pas de contrainte sur la signature. Cependant, si la méthode de ressource JAX-RS a été développée en réutilisant et en adaptant des classe et des méthodes existantes pour ajouter des fonctions JAX-RS, la signature de la méthode peut subir des contraintes provenant du code réutilisé qui appelle la méthode. Dans ce cas, il est possible que la signature de la méthode ne soit pas modifiable.
  2. Si une signature de méthode de ressource peut être modifiée, ajoutez à la méthode le paramètre javax.ws.rs.core.HttpHeaders annoté avec @javax.ws.rs.core.Context. Lorsque la méthode de ressource est appelée, l'environnement d'exécution JAX-RS envoie un objet qui implémente l'objet HttpHeaders, par exemple :
    @Path("/contextexample")
    public class RootResource {
        @GET
            public String getResource(@Context HttpHeaders httpHeaders) {
                    /* Appelle une méthode sur httpHeaders. */
                    retur "The client sent a header value of " + headers.getRequestHeaders().getFirst("CustomHeader") + " for CustomHeader";
        }
    }
  3. Si une signature de méthode de ressource n'est pas modifiable et la classe est une ressource racine, ajoutez à celle-ci une zone javax.ws.rs.core.HttpHeaders annotée avec @javax.ws.rs.core.Context. Lorsque la ressource est instanciée pour une demande, un objet qui implémente l'objet HttpHeaders est injecté, par exemple :
    @Path("/contextexample")
    public class RootResource {
    
        @Context
        HttpHeaders httpHeaders;
    
        @GET
        public String getResource() {
                    /* Appelle une méthode sur httpHeaders. */
                    retur "The client sent a header value of " + headers.getRequestHeaders().getFirst("CustomHeader") + " for CustomHeader";
        }
    }

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!";
        }
    }
}

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_contextobjects_httpheaders
Nom du fichier : twbs_jaxrs_contextobjects_httpheaders.html