Spring Boot @RequestParam 解析参数时的常见问题及解决方案
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(表单方式)由于我并不打算修改后端所以使用这方式还是非常合适的。

这样就可以了。
