it-swarm.com.de

Wie erhalte ich Zugriff auf HTTP-Header-Informationen in Spring MVC REST controller?

Ich bin neu in der Webprogrammierung im Allgemeinen, insbesondere in Java, und habe gerade gelernt, was ein Header und ein Body ist.

Ich schreibe RESTful-Services mit Spring MVC. Ich bin in der Lage, einfache Dienste mit dem @RequestMapping in meinen Controllern. Ich brauche Hilfe, um zu verstehen, wie HTTP-Header-Informationen aus einer Anforderung abgerufen werden, die auf meinem REST Service Controller) zu meiner Methode gelangt. Ich möchte den Header analysieren und einige Attribute daraus abrufen.

Können Sie erklären, wie ich diese Informationen erhalte?

140
Horse Voice

Wenn Sie einen Parameter mit @RequestHeader, der Parameter ruft die Header-Informationen ab. Sie können also einfach so etwas tun:

@RequestHeader("Accept")

um den Accept Header zu erhalten.

Also aus der Dokumentation :

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

}

Das Accept-Encoding und Keep-Alive Header-Werte werden in den Parametern encoding und keepAlive angegeben.

Und keine Sorge. Wir sind alle noobs mit etwas.

248
Vidya

Du kannst den ... benutzen @RequestHeader Annotation mit dem Methodenparameter HttpHeaders, um Zugriff auf alle Anforderungsheader zu erhalten:

@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

Meine Lösung in Header-Parametern mit Beispiel ist ser = "test" ist:

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

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