@requestheader用于从http请求头提取指定字段值,支持单值绑定、required=false可选配置、defaultvalue默认值、自动类型转换(如int/枚举)、multivaluemap批量获取及大小写不敏感匹配。

在 Java 的 Spring MVC 中,@RequestHeader 注解用于从 HTTP 请求头(Request Headers)中提取指定字段的值,常用于获取 Authorization、User-Agent、Content-Type、自定义 Header 等信息。
基本用法:绑定单个请求头
直接在控制器方法参数上使用 @RequestHeader("HeaderName"),Spring 会自动从请求头中查找对应键的值并注入:
@GetMapping("/api/user")
public String getUser(@RequestHeader("User-Agent") String userAgent) {
System.out.println("客户端 UA:" + userAgent);
return "success";
}
若请求头不存在,默认会抛出 MissingRequestHeaderException。可加 required = false 避免报错:
@RequestHeader(value = "X-Trace-ID", required = false) String traceId
支持类型转换和默认值
@RequestHeader 支持自动类型转换(如 Long、Boolean、枚举等),也支持设置默认值(当 header 缺失时使用):
@RequestHeader(value = "Retry-Count", defaultValue = "0") int retryCount-
@RequestHeader("X-Auth-Type") AuthType authType(假设AuthType有静态valueOf方法)
批量获取所有请求头
用 Map<string string></string> 或 MultivaluedMap<string string></string>(需引入 javax.ws.rs.core)接收全部 header;更常用的是 Spring 自带的 HttpHeaders:
@GetMapping("/info")
public String showHeaders(@RequestHeader HttpHeaders headers) {
String auth = headers.getFirst("Authorization");
List<string> accepts = headers.get("Accept"); // 可能多个 Accept 值
return "headers processed";
}</string>
注意大小写与标准 Header 名称
HTTP 头部名称不区分大小写,Spring 内部做了标准化处理(如 "user-agent"、"USER-AGENT" 都能匹配 "User-Agent")。但建议按 RFC 规范使用驼峰格式书写,例如:
-
"Content-Type"而非"content-type" -
"X-Request-ID"而非"x-request-id"
自定义 Header 推荐以 X- 开头(虽非强制),便于识别。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











