典型用法
基础用法:获取指定请求头值
@GetMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {return "User-Agent: " + userAgent;
}如果请求中包含 User-Agent 请求头,则其值将被注入到 userAgent 参数。
若未找到该 Header,默认会抛出异常(除非设置 required=false)。
设置默认值(defaultValue)
当请求头不存在时,可以提供一个默认值:
@GetMapping("/content-type")
public String getContentType(@RequestHeader(name = "Content-Type", defaultValue = "application/json") String contentType) {return "Content-Type: " + contentType;
}若没有 Content-Type 请求头,则使用 "application/json" 作为默认值。
可选请求头(required=false)
允许请求头缺失而不抛出异常:
@GetMapping("/optional-header")
public String optionalHeader(@RequestHeader(name = "X-Custom-Header", required = false) String customHeader) {if (customHeader == null) {return "Custom header not provided.";}return "Custom Header Value: " + customHeader;
}
获取所有请求头(Map 形式)
你可以通过 Map<String, String> 获取所有请求头,可用于日志记录、调试或通用处理逻辑。
@GetMapping("/all-headers")
public String allHeaders(@RequestHeader Map<String, String> headers) {StringBuilder sb = new StringBuilder();for (Map.Entry<String, String> entry : headers.entrySet()) {sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");}return sb.toString();
}
获取请求头对象集合(MultiValueMap)
如果你需要获取多个相同名称的请求头值(如多 Accept 类型),可以使用 MultiValueMap:
@GetMapping("/multi-accept")
public String handleAcceptHeader(@RequestHeader MultiValueMap<String, String> headers) {List<String> acceptValues = headers.get("Accept");return "Client Accepts: " + acceptValues;
}// 如果客户端发送如下请求头
Accept: text/plain
Accept: application/json
Accept: */*// 输出结果将是
Client Accepts: [text/plain, application/json, */*]