1,遇到的问题:将后端接口写完后我想通过PostMan进行简单的测试一下,一不小心就遇到了这样的情况:
org.springframework.web.bind.MissingServletRequestParameterException:
Required Integer parameter 'contractId' is not present
1.1问题如下图:
明明传递了参数后端无法解析:
2.原因分析:最后查看了一下接口方法才发现原因,由于使用的是@RequestParam由于 @RequestParam 不会解析 JSON,所以如果前端发送 JSON 数据:就会出现如上图一样的错误。
2.1如下面所示

2.2这是后端接口的方法:
@PostMapping("/contractDiscard")
@SysLogHandler
public Result contractDiscard(@RequestParam("contractId") Integer contractId) {boolean auth = AuthUtil.isRwAuth(contractId, CrmEnum.CONTRACT,CrmAuthEnum.EDIT);if (auth) {throw new CrmException(SystemCodeEnum.SYSTEM_NO_AUTH);}crmContractService.contractDiscard(contractId);return R.ok();
}
3.出现这种情况的原因:
| 传参方式 | 请求方式 | 适用情况 | 说明 |
|---|---|---|---|
| URL 参数 | GET /contractDiscard?contractId=62133 | ✅ @RequestParam | 适用于 GET 请求 |
| 表单提交 | POST application/x-www-form-urlencoded | ✅ @RequestParam | 适用于 POST 表单提交 |
| JSON 传参 | POST application/json | ❌ @RequestParam 无法解析 | @RequestParam 只支持 URL 或表单 |
4, 解决方案:
解决方案有很多种,我使用的是使用 @RequestParam(表单方式)由于我并不打算修改后端所以使用这方式还是非常合适的。

这样就可以了。