web-dev-qa-db-fra.com

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

Je suis nouveau dans la programmation Web en général, en particulier en Java, alors je viens d'apprendre ce qu'est un en-tête et un corps.

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

Pourriez-vous expliquer comment je vais obtenir cette information?

140
Horse Voice

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

@RequestHeader("Accept")

pour obtenir l'en-tête Accept.

Donc de la documentation :

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

}

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

Et pas de soucis. Nous sommes tous noobs avec quelque chose.

248
Vidya

Vous pouvez utiliser l'annotation @RequestHeader avec la 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) {
    // Use headers to get the information about all the request headers
    long contentLength = headers.getContentLength();
    // ...
    StreamSource source = new StreamSource(new StringReader(body));
    YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source);
    // ...
}
81
Debojit Saikia

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

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

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