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

Spring Boot指定获取lastevaluatedkey请求头却返回全部头部是为什么

问题原因

这是Spring MVC对@RequestHeader注解的默认处理规则导致的:

  • 如果@RequestHeader指定了单个请求头名称,但接收参数的类型为Map<String, ?>、MultiValueMap<String, ?>或HttpHeaders,Spring会直接忽略你指定的请求头名称,将全部请求头的键值对都注入到该Map参数中。

你的代码完全匹配这个场景:指定了要获取lastevaluatedkey请求头,但参数类型定义为Map<String,AttributeValue>,所以最终返回了全量请求头内容。

修复方案

请求头本身传输的是字符串格式,你携带的lastevaluatedkey是JSON结构的字符串,所以可以通过以下两种方案实现需求:

方案1:单独接收指定请求头再反序列化

// 先按字符串类型接收单个请求头
(@RequestHeader("lastevaluatedkey") String lastEvaluatedKeyJson) {
    // 使用JSON序列化工具(如Jackson、Gson)将字符串转为目标格式即可
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, AttributeValue> lastEvaluatedKey = objectMapper.readValue(
        lastEvaluatedKeyJson,
        new TypeReference<Map<String, AttributeValue>>() {}
    );
}

方案2:先接收全量请求头再提取目标值

// 不指定请求头名称,用Map接收所有请求头
(@RequestHeader Map<String, String> allHeaders) {
    String lastEvaluatedKeyJson = allHeaders.get("lastevaluatedkey");
    // 后续同样做反序列化处理即可
}

内容的提问来源于stack exchange,提问作者Rajat Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:54:02