3.7 @RequestHeader注解

3.7 @RequestHeader注解

用途

org.springframework.web.bind.annotation.RequestHeader注解用于将请求的头信息数据映射到请求处理方法的形式参数

属性

使用@Requestheader注解可指定如下表所示的属性。

属性 类型 是否必要 说明
name String 指定请求参数绑定的名称
value String name属性的别名
required boolean 指示参数是否必须绑定
defaultValue String 如果没有传递参数而使用的默认值

示例代码

@RequestHeader注解示例代码如下:

1
2
3
4
5
6
7
@RequestMapping(value="/requestHeaderTest")
public void requestHeaderTest(
@RequestHeader ("User-Agent") String userAgent,
@RequestHeader (value="Accept") String[] accepts)
{
...
}

以上配置自动将请求头"User-Agent"的值赋到userAgent变量上,并将请求头"Accept"的值赋到accepts变量上。

示例:@RequestHeader注解的使用

新建一个项目RequestHeaderTest,加入所需的jar文件.

项目结构

展开/折叠
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\03\RequestHeaderTest
├─src\
│ └─org\
│ └─fkit\
│ └─controller\
│ └─RequestHeaderController.java
└─WebContent\
├─index.jsp
├─META-INF\
│ └─MANIFEST.MF
└─WEB-INF\
├─lib\
│ ├─commons-logging-1.2.jar
│ ├─spring-aop-5.0.1.RELEASE.jar
│ ├─spring-aspects-5.0.1.RELEASE.jar
│ ├─spring-beans-5.0.1.RELEASE.jar
│ ├─spring-context-5.0.1.RELEASE.jar
│ ├─spring-context-indexer-5.0.1.RELEASE.jar
│ ├─spring-context-support-5.0.1.RELEASE.jar
│ ├─spring-core-5.0.1.RELEASE.jar
│ ├─spring-expression-5.0.1.RELEASE.jar
│ ├─spring-instrument-5.0.1.RELEASE.jar
│ ├─spring-jcl-5.0.1.RELEASE.jar
│ ├─spring-jdbc-5.0.1.RELEASE.jar
│ ├─spring-jms-5.0.1.RELEASE.jar
│ ├─spring-messaging-5.0.1.RELEASE.jar
│ ├─spring-orm-5.0.1.RELEASE.jar
│ ├─spring-oxm-5.0.1.RELEASE.jar
│ ├─spring-test-5.0.1.RELEASE.jar
│ ├─spring-tx-5.0.1.RELEASE.jar
│ ├─spring-web-5.0.1.RELEASE.jar
│ ├─spring-webflux-5.0.1.RELEASE.jar
│ ├─spring-webmvc-5.0.1.RELEASE.jar
│ └─spring-websocket-5.0.1.RELEASE.jar
├─springmvc-config.xml
└─web.xml

示例代码如下:

RequestHeaderController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.fkit.controller;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;

@Controller
public class RequestHeaderController
{
// 测试@RequestHeader注解
// 该方法映射的请求为 /requestHeaderTest
@GetMapping(value = "/requestHeaderTest")
// 把请求头User-Agent的内容赋值给方法的形式参数userAgent
public void requestHeaderTest(@RequestHeader("User-Agent") String userAgent,
@RequestHeader(value = "Accept") String[] accepts,
HttpServletResponse response)
{
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter writer;
try
{
writer = response.getWriter();
writer.println(
"通过@requestHeaderTest获得User-Agent: " + userAgent + "<br>");
writer.println("通过@requestHeaderTest获得Accept: " + "<br>");
// 循环输出头信息
for (String accept : accepts)
{
writer.println(accept + "<br>");
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}

requestHeaderTest方法中使用@RequestHeader注解获取请求头"User-Agent"的值并赋给userAgent变量,获取请求头"Accept"的值并赋给accepts变量。

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>@RequestHeader测试</title>
</head>
<body>
<h2>@RequestHeader测试</h2>
<a href="requestHeaderTest">测试@RequestHeader注解</a>
<br>
</body>
</html>

部署RequestHeaderTest这个Web应用,在浏览器中输入如下URL来测试应用:

1
http://localhost:8080/RequestHeaderTest/

此时会显示index.jsp页面的内容,单击测试@RequestHeader注解超链接发送请求,将调用requestHeaderTest方法,浏览器显示效果如下:

1
2
3
4
5
6
通过@requestHeaderTest获得User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
通过@requestHeaderTest获得Accept:
text/html
application/xhtml+xml
application/xml;q=0.9
*/*;q=0.8

可以看到,请求头User-Agent的值赋给了userAgent变量,请求头Accept的值赋给了accepts变量,不过要注意,不同的浏览器请求头数据略有不同。