You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:15:44