如何在 Spring MVC REST 控制器中访问 HTTP 头信息?

我对 web 编程一般都是新手,特别是在 Java 中,所以我刚刚学习了头和主体是什么。

我正在使用 Spring MVC 编写 RESTful 服务。我能够在我的控制器中使用 @RequestMapping创建简单的服务。我需要帮助来理解如何从进入我的 REST 服务控制器中的方法的请求中获取 HTTP 头信息。我想解析出标题并从中获得一些属性。

你能解释一下我是如何得到这些信息的吗?

221373 次浏览

当您使用 @RequestHeader对参数进行注释时,该参数将检索标头信息。你可以这样做:

@RequestHeader("Accept")

获取 Accept头。

因此,从 文件:

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


}

Accept-EncodingKeep-Alive报头值分别在 encodingkeepAlive参数中提供。

别担心,我们都是菜鸟。

您可以使用带有 HttpHeaders方法参数的 @RequestHeader注释来访问所有请求头:

@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);
// ...
}

例如,我在 Header 参数中的解决方案是 User = “ test”:

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


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

可以使用 HttpEntity 读取 Body 和 Header。

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

String body = httpEntity.getBody();


}