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

Hor*_*ice 147 rest spring http spring-mvc request-headers

我是Web编程的新手,特别是在Java中,所以我只是学习了标题和正文.

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

你能解释我如何获取这些信息吗?

Vid*_*dya 254

使用时注释参数时@RequestHeader,参数将检索标头信息.所以你可以这样做:

@RequestHeader("Accept")
Run Code Online (Sandbox Code Playgroud)

得到Accept标题.

所以从文档:

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

}
Run Code Online (Sandbox Code Playgroud)

Accept-EncodingKeep-Alive在被提供标头值encodingkeepAlive参数分别.

而且不用担心.我们都是新手.

  • 应该提一下,如果请求不包含此类标头,您将收到400错误请求错误作为响应.更灵活的方式是直接访问请求标头,如下所述:http://stackoverflow.com/a/28209710/1828296 (5认同)
  • @lospejos,可以通过使用“required”标志来避免,例如“@RequestHeader(name = "Keep-Alive", required = false) long keepAlive”,如果未提供,则将 keepAlive 设置为 null。注释还有“defaultValue”字段https://docs.spring.io/spring-framework/docs/5.0.7.RELEASE/javadoc-api/org/springframework/web/bind/annotation/RequestHeader.html (2认同)

Deb*_*kia 84

您可以使用@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);
    // ...
}
Run Code Online (Sandbox Code Playgroud)


小智 13

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

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

System.out.println(headers.get("user"));
}
Run Code Online (Sandbox Code Playgroud)