当前位置: 首页 > news >正文

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.出现这种情况的原因:

@RequestParam 适用于以下几种情况

传参方式请求方式适用情况说明
URL 参数GET /contractDiscard?contractId=62133@RequestParam适用于 GET 请求
表单提交POST application/x-www-form-urlencoded@RequestParam适用于 POST 表单提交
JSON 传参POST application/json@RequestParam 无法解析@RequestParam 只支持 URL 或表单

4, 解决方案:

解决方案有很多种,我使用的是使用 @RequestParam(表单方式)由于我并不打算修改后端所以使用这方式还是非常合适的。

这样就可以了。 

相关文章:

  • linux基本命令(2)--进程命令PS
  • Linux更换挂载nfs迁移数据流程
  • 使用AOP技术实现Java通用接口验签工具
  • 【vue】editor富文本输入全英文,谷歌浏览器:元素不会自动换行bug
  • 为什么hash%length 和hashlength-1 的值是一样的(当length=2的幂次方)
  • Java:三十年演进,永续创新的编程传奇
  • 【SPP】蓝牙 SDP 协议在SPP中的互操作性解析
  • vue2修改窗口字典回显
  • 四款高效数据报表工具 让数据分析更简单
  • TCP的连接建立
  • 解释一下Unity碰撞的触发条件
  • 【LeetCode Solutions】LeetCode 121 ~ 125 题解
  • Unity中根据文字数量自适应长宽的对话气泡框UI 会自动换行
  • 助力 Windows 文件管理:重命名与清理重复文件软件精选
  • leetcode刷题日记——罗马数字转整数
  • 基于SpringBoot + HTML 的心理健康管理系统
  • PHY——LAN8720A 代码解析 (三)
  • HttpClient-01.介绍
  • Libevent UDP开发指南
  • 基于动态渲染与反检测技术的爬虫框架设计
  • 夜读丨喜马拉雅山的背夫
  • 烈士沈绍藩遗孤、革命家帅孟奇养女舒炜逝世,享年96岁
  • 壹基金发布2024年度报告,公益项目惠及937万人次
  • 巴基斯坦称约50名印度士兵在克什米尔实控线丧生
  • 中国海警依法驱离日非法进入我钓鱼岛领海船只
  • 金融监管总局:近五年民企贷款投放年平均增速比各项贷款平均增速高出1.1个百分点