@RequestHeader是 Spring MVC 中用于访问 HTTP 请求头的核心注解,它提供了一种简洁高效的方式将请求头信息绑定到控制器方法参数上。
| 属性 | 类型 | 默认值 | 说明 |
|---|
value/name | String | “” | 请求头名称 |
required | boolean | true | 是否必须存在 |
defaultValue | String | ValueConstants.DEFAULT_NONE | 默认值 |
1. 基本用法
@GetMapping("/api") public ResponseEntity<?> getData( @RequestHeader("X-Token") String token) { // 使用请求头中的token return dataService.fetchData(token); }
2. 多值请求头处理
@GetMapping("/content") public String getContent( @RequestHeader("Accept") String[] acceptTypes) { // 处理多个接受类型 return contentService.resolveContent(acceptTypes); }
3. 可选请求头与默认值
@PostMapping("/submit") public ResponseEntity<?> submit( @RequestHeader(value = "X-Request-Id", required = false) String requestId, @RequestHeader(value = "X-Version", defaultValue = "1") int version) { // requestId为可选,version默认为1 return processingService.process(requestId, version); }
4. 绑定到 Map
@GetMapping("/analytics") public Map<String, String> analyzeHeaders( @RequestHeader Map<String, String> headers) { // 包含所有请求头的Map return analyticsService.analyze(headers); }
使用场景
1. API 版本控制
@GetMapping("/users") public ResponseEntity<?> getUsers( @RequestHeader("API-Version") int version) { if (version >= 2) { return ResponseEntity.ok(userService.findAllV2()); } else { return ResponseEntity.ok(userService.findAllV1()); } }
2. 内容协商
@GetMapping(value = "/data", produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) public Data getData( @RequestHeader("Accept") String accept) { if (accept.contains(MediaType.APPLICATION_XML_VALUE)) { return dataService.getDataInXml(); } else { return dataService.getDataInJson(); } }
3. 权限认证
@PostMapping("/admin") public ResponseEntity<?> adminAction( @RequestHeader("Authorization") String token) { if (!authService.validateToken(token)) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } return ResponseEntity.ok(adminService.performAction()); }
请求头使用规范
| 请求头 | 典型用途 | 示例 |
|---|
| Authorization | 身份认证 | Bearer令牌 |
| Accept | 内容协商 | application/json |
| Content-Type | 请求体类型 | application/json |
| User-Agent | 客户端识别 | 浏览器信息 |
| X-Request-ID | 请求追踪 | UUID |
| If-Modified-Since | 缓存控制 | HTTP日期格式 |
| Accept-Language | 语言选择 | en-US |
| API-Version | 版本控制 | v2 |