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
(表单方式)由于我并不打算修改后端所以使用这方式还是非常合适的。
这样就可以了。