如何用Curl调用接收Map<String,Object>请求参数的GET接口?
解决Spring GET接口Map参数为null的问题
问题根源
你的代码存在两个关键问题:
- 方法访问修饰符错误:Spring MVC的请求处理方法必须是
public,你当前用private修饰,Spring无法识别并调用这个接口方法,这是核心问题之一。 - 参数传递方式错误:
@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¶ms[timeUnit]=hours"
原理说明
Spring MVC中,当@RequestParam绑定到Map时,会自动将所有以params[xxx]命名的Query参数收集到Map中,键为xxx,值为对应的参数值。这种方式是GET请求传递键值对类型Map参数的标准方式,而非传递JSON请求体。
内容的提问来源于stack exchange,提问作者vasu
相关产品推荐
相关产品推荐

