183 votes

Comment accéder aux informations d'en-tête HTTP dans un contrôleur REST Spring MVC?

Je débute en programmation web en général, surtout en Java, donc je viens d'apprendre ce qu'est un en-tête et un corps.

Je suis en train d'écrire des services RESTful en utilisant Spring MVC. Je suis capable de créer des services simples avec @RequestMapping dans mes contrôleurs. J'ai besoin d'aide pour comprendre comment obtenir les informations d'en-tête HTTP d'une requête qui arrive à ma méthode dans mon contrôleur de service REST. J'aimerais analyser l'en-tête et en obtenir quelques attributs.

Pourriez-vous m'expliquer comment je peux faire pour obtenir ces informations?

304voto

Vidya Points 10226

Lorsque vous annotez un paramètre avec @RequestHeader, le paramètre récupère les informations d'en-tête. Donc, vous pouvez simplement faire quelque chose comme ceci :

@RequestHeader("Accept")

pour obtenir l'en-tête Accept.

Donc, à partir de la documentation :

@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
                              @RequestHeader("Keep-Alive") long keepAlive)  {

}

Les valeurs des en-têtes Accept-Encoding et Keep-Alive sont fournies dans les paramètres encoding et keepAlive respectivement.

Et ne vous inquiétez pas. Nous sommes tous des débutants dans quelque chose.

96voto

Debojit Saikia Points 8634

Vous pouvez utiliser l'annotation @RequestHeader avec le paramètre de méthode HttpHeaders pour accéder à tous les en-têtes de requête :

@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
    // Utilisez les en-têtes pour obtenir des informations sur tous les en-têtes de requête
    long contentLength = headers.getContentLength();
    // ...
    StreamSource source = new StreamSource(new StringReader(body));
    VotreObjet obj = (VotreObjet) jaxb2Mashaller.unmarshal(source);
    // ...
}

18voto

Armando Cordova Points 307

Ma solution dans les paramètres d'en-tête avec l'exemple est user="test" :

@RequestMapping(value = "/restURL")
  public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){

System.out.println(headers.get("user"));
}

0voto

Sreepad Points 29

Vous pouvez utiliser HttpEntity pour lire à la fois le corps et les en-têtes.

   @RequestMapping(value = "/restURL")
   public String serveRest(HttpEntity httpEntity){
                MultiValueMap headers = 
                httpEntity.getHeaders();
                Iterator>> s = 
                headers.entrySet().iterator();
                while(s.hasNext()) {
                    Map.Entry> obj = s.next();
                    String key = obj.getKey();
                    List value = obj.getValue();
                }

                String body = httpEntity.getBody();

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X