Spring REST API中@RequestHeader Map无法获取指定Header值的问题求助
解决方案
问题原因
Spring 在将 HTTP Header 封装到 Map<String,String> 时,会自动将 Header 名称转换为全小写。你在 Postman 中传入的 externalId,在 Map 里的实际键是 externalid,所以用 headers.get("externalId") 会返回 null,但打印整个 Map 时能看到对应的键值对。
方案1:直接绑定单个Header参数(推荐)
不用 Map 接收所有 Header,直接指定目标 Header 名称绑定到参数上,简单且避免大小写问题:
@GetMapping("transactionDetails") TransactionResponse getTransactionDetailsByExternalId(@RequestHeader("externalId") String externalId){ return transactionService.getTransactionDetailsByExternalId(externalId); }
方案2:使用Spring的HttpHeaders类
如果需要接收多个Header,改用HttpHeaders类型代替Map<String,String>,它的getFirst()方法支持不区分大小写的键查找:
@GetMapping("transactionDetails") TransactionResponse getTransactionDetailsByExternalId(@RequestHeader HttpHeaders headers){ String externalId = headers.getFirst("externalId"); if(externalId != null){ return transactionService.getTransactionDetailsByExternalId(externalId); } // 根据业务需求补充默认返回或异常处理 return null; }
方案3:保留Map但使用小写键
如果坚持用Map<String,String>,则需要用小写的键去获取值:
@GetMapping("transactionDetails") TransactionResponse getTransactionDetailsByExternalId(@RequestHeader Map<String,String> headers){ if(headers.containsKey("externalid")){ return transactionService.getTransactionDetailsByExternalId(headers.get("externalid")); } // 补充后续逻辑 return null; }
内容的提问来源于stack exchange,提问作者Prince Bhati
相关产品推荐
相关产品推荐

