Spring Boot GET请求自定义Header无法获取值问题排查
问题排查:@RequestHeader无法获取email值的原因及解决办法
请求头参数名大小写不匹配
HTTP标准里请求头不区分大小写,但部分JAX-RS实现(如Jersey、RESTEasy)对注解中的参数名匹配可能严格区分。检查Postman中请求头的键名是否为email,如果是Email或EMAIL这类变体,改成全小写重试。Postman实际未发送目标请求头
打开Postman的「控制台」,查看完整的请求详情,确认email请求头确实被发送。如果开启了代理、拦截器或使用了空值的环境变量,可能导致请求头未被正确添加。注解类混淆
确保代码中使用的@RequestHeader是JAX-RS的javax.ws.rs.core.RequestHeader,而非Spring的org.springframework.web.bind.annotation.RequestHeader。如果项目同时引入了Spring和JAX-RS依赖,注解混用会导致参数无法被正确识别。参数类型适配问题
尝试将String类型改为Optional<String>,避免框架对空值的处理差异:public Response getUser(@RequestHeader(name="email", required = false) Optional<String> email, @PathParam("user_id") String userId, @QueryParam("pref") Boolean pref)之后通过
email.orElse(null)获取实际值,观察是否能正常接收。服务器端拦截器/过滤器修改请求头
检查项目中的过滤器、拦截器(如安全校验、CORS处理组件)是否会移除或篡改email请求头。可以在过滤器中打印所有请求头内容,确认该参数能传递到接口方法层面。
内容的提问来源于stack exchange,提问作者ktb
相关产品推荐
相关产品推荐

