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

Spring GET请求传参报错400:MissingServletRequestParameterException排查

问题根源

GET 请求的 HTTP 规范中,参数应通过URL查询参数(?key=value形式)传递,而非请求体(JSON)。Spring MVC 的@RequestParam注解默认从查询参数、表单参数中取值,不会解析请求体内的 JSON 数据。你用 Postman 将参数放在 JSON 请求体里发送 GET 请求,Spring 找不到对应的参数,因此抛出MissingServletRequestParameterException。

解决方案

1. 遵循GET规范传递参数(推荐)

将uniqueConfig和commitHash作为查询参数拼在 URL 后,示例:
http://your-domain/statsUnique?uniqueConfig=xxx&commitHash=yyy
在 Postman 中选择 GET 方法,切换到「Params」标签页添加这两个键值对,无需填写请求体。

对应 Controller 代码(假设你原本的写法如下):

@GetMapping("/statsUnique")
public ResponseEntity<?> getStats(@RequestParam String uniqueConfig, @RequestParam String commitHash) {
    // 业务逻辑实现
    return ResponseEntity.ok(...);
}

2. 特殊场景下用请求体传GET参数(不推荐)

若因特殊需求必须用请求体传递 GET 参数,可改用@RequestBody接收,但需注意:部分 HTTP 客户端或服务器可能不支持 GET 请求带请求体,且不符合 HTTP 设计原则。

调整后的 Controller 代码:

// 定义参数实体类
public class StatsRequest {
    private String uniqueConfig;
    private String commitHash;
    
    // 生成 getter、setter 方法
}

// Controller 接口
@GetMapping("/statsUnique")
public ResponseEntity<?> getStats(@RequestBody StatsRequest request) {
    String uniqueConfig = request.getUniqueConfig();
    String commitHash = request.getCommitHash();
    // 业务逻辑实现
    return ResponseEntity.ok(...);
}

3. 改用POST请求(适合复杂参数场景)

如果参数结构复杂或更适合放在请求体中,直接将接口改为 POST 方法:

@PostMapping("/statsUnique")
public ResponseEntity<?> getStats(@RequestBody StatsRequest request) {
    // 业务逻辑实现
    return ResponseEntity.ok(...);
}

Postman 中选择 POST 方法,切换到「Body」标签页,选择「raw」并设置格式为 JSON,传入参数:

{
    "uniqueConfig": "xxx",
    "commitHash": "yyy"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:35:21