175

一般来说,我是 Web 编程的新手,尤其是在 Java 中,所以我刚刚了解了 header 和 body 是什么。

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

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

4

4 回答 4

289

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

@RequestHeader("Accept")

获取Accept标题。

所以从文档中:

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

}

Accept-Encoding和标Keep-Alive头值分别在encodingkeepAlive参数中提供。

而且不用担心。我们都是有东西的菜鸟。

于 2013-10-24T02:54:33.533 回答
91

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

@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);
    // ...
}
于 2013-10-24T03:18:20.293 回答
18

我在 Header 参数中的解决方案是user="test"是:

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

System.out.println(headers.get("user"));
}
于 2017-08-01T17:35:20.623 回答
0

您可以使用 HttpEntity 来读取 Body 和 Headers。

   @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();

    }
于 2020-12-04T07:23:15.883 回答