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

如何用Curl调用接收Map<String,Object>请求参数的GET接口?

解决Spring GET接口Map参数为null的问题

问题根源

你的代码存在两个关键问题:

  1. 方法访问修饰符错误:Spring MVC的请求处理方法必须是public,你当前用private修饰,Spring无法识别并调用这个接口方法,这是核心问题之一。
  2. 参数传递方式错误:@RequestParam(name = "params") Map<String, Object>期望从URL的Query String中接收params[键名]格式的键值对,而非JSON格式的请求体。GET请求默认不会解析请求体内容作为@RequestParam参数。

修正步骤

1. 修正接口方法修饰符

把接口方法的private改为public:

@GetMapping("/abc/aa/{type}")
public final ResponseEntity<Void> invoke(@PathVariable String type,
        @RequestParam(name = "params", required = false) Map<String, Object> params)
{
    // 你的业务逻辑
}

2. 正确的Curl调用命令

使用params[键名]的格式传递参数,通过--data-urlencode编码参数避免特殊字符问题:

curl -G http://localhost:8585/abc/aa/default_aa.TEST_varchar100_94946640 \
  --data-urlencode "params[since]=2" \
  --data-urlencode "params[timeUnit]=hours"

或者直接把参数拼在URL中:

curl "http://localhost:8585/abc/aa/default_aa.TEST_varchar100_94946640?params[since]=2&params[timeUnit]=hours"

原理说明

Spring MVC中,当@RequestParam绑定到Map时,会自动将所有以params[xxx]命名的Query参数收集到Map中,键为xxx,值为对应的参数值。这种方式是GET请求传递键值对类型Map参数的标准方式,而非传递JSON请求体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:22:36