@requestheader用于绑定http请求头到控制器参数,支持直接映射、可选配置(required=false+defaultvalue)、批量获取(map或httpheaders)及类型转换(含枚举、日期等)。

在 Spring MVC 中,@RequestHeader 是一个用于绑定 HTTP 请求头(Header)到控制器方法参数的注解。它能方便地提取客户端发送的请求头字段,比如 Authorization、User-Agent、Content-Type 等。
基本用法:直接映射请求头字段
最常见的方式是将请求头名称作为注解的 value 值,Spring 会自动从当前 HTTP 请求中提取对应 Header 的值,并尝试转换为参数类型:
- 如果请求头存在且可转换(如字符串、数字、枚举),则赋值成功
- 如果请求头不存在,默认会抛出
MissingRequestHeaderException
示例:
@GetMapping("/api/data")
public String getData(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent: " + userAgent;
}
设置默认值与可选性
使用 required = false 可让该 Header 成为可选;再配合 defaultValue,可以避免空值判断:
-
required = false表示即使请求没带这个头,也不报错 -
defaultValue = "unknown"在头缺失或为空时提供默认值
示例:
@GetMapping("/api/log")
public String logInfo(@RequestHeader(value = "X-Trace-ID", required = false, defaultValue = "N/A") String traceId) {
return "Trace ID: " + traceId;
}
批量获取所有请求头
如果需要读取全部 Header,可以把参数类型设为 Map<string string></string> 或 HttpHeaders:
-
Map<string string></string>:只保留每个 Header 的第一个值(适用于单值 Header) -
HttpHeaders:Spring 封装类,支持多值 Header(如Accept可能有多个值),推荐用于复杂场景
示例(使用 HttpHeaders):
@GetMapping("/api/headers")
public String showAllHeaders(HttpHeaders headers) {
return headers.toSingleValueMap().toString();
}
类型转换与自定义解析
Spring 默认支持常见类型的自动转换(如 Long、Boolean、Enum)。若需特殊格式(如时间戳、自定义编码),可:
- 添加
@DateTimeFormat处理日期字符串 - 实现
Converter<string yourtype></string>并注册到WebMvcConfigurer - 对枚举类型,确保 Header 值与
name()或@JsonValue匹配
示例(枚举):
public enum ApiVersion { V1, V2 }
@GetMapping("/api/resource")
public String getResource(@RequestHeader("X-API-Version") ApiVersion version) {
return "Using version: " + version;
}
此时请求需携带 X-API-Version: V1 才能正确绑定。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











