Spring MVC的@RequestParam分析

news/2025/2/22 1:20:08/

前言

本篇文章涉及到一下相关问题

1.报错Required String parameter 'xx' is not present

2.@RequestParam接收post请求参数报错

3.@RequestParam使用原理

4.springmvc使用@RequestParam一样的参数名,怎么接收不到。

5.axios发送post请求,springMVC接收不到数据问题

问题demo

    @RequestMapping(method = RequestMethod.POST, value = "/test")@ResponseBodypublic ResponseEntity testDelete(@RequestParam("id") Integer id)throws Exception {return ResponseEntity.ok();}

代码中是规定了请求方式POST,使用@RequestParam接收id参数。

然后前台请求参数也对,是这个形式的{id:111},看起来没错啊,参数名完全一样,但是后台报错Required String parameter 'id' is not present,说id参数必须传过来。

分析问题

虽然前端传递的参数形式为{id: 111},看起来id的参数名确实是一样的,但是这个参数是作为请求的body而非作为普通参数或query parameter传递的。因此无法直接使用@RequestParam注释接收它。

SpringMVC后台接受不到POST请求数据 | 一锅乱炖

以及区别

HTTP请求中的form data和request payload的区别

HTTP请求中的Form Data与Request Payload的区别 · Issue #105 · kaola-fed/blog · GitHub

解决问题

正确的处理方式应该是在控制器方法中声明一个对象作为请求体,并添加@RequestBody注释进行注释,类似于以下示例:

@RequestMapping(method = RequestMethod.POST, value = "/test")
@ResponseBody
public ResponseEntity testDelete(@RequestBody Map<String, Object> requestBody)throws Exception {Integer id = (Integer) requestBody.get("id");// do something with idreturn ResponseEntity.ok();
}

在这种情况下,我们将整个请求消息主体(即{id: 111})作为一个Map对象接收,并从中获取所需的id值。通过这种方式,可以忽略掉请求参数名称是否匹配以及请求参数是否需要特殊处理等问题


http://www.ppmy.cn/news/51997.html

相关文章

【unity项目实战】3DRPG游戏开发03—— 绘制low poly风格的场景

搭建场景 拖入一颗树,按住V键,表示顶点吸附,点击树的底部,他就会自动吸附到相邻的平面上了 如果你的摄像机位置不是很好,我们可以场景移动到合适的位置,可以点击摄像机,按下键盘ctrl+shift+F同步调整摄像机位置 绘制low poly风格的环境 安装Ploybrush插件,并导入样…

Node.js 20 已发布,来看看 Node.js 20 的新功能吧

写在前面 Node.js 20 已经在 2023 年 4 月 18 日发布了&#xff0c;并且将于 2023 年 10 月进入长期支持&#xff08;也就是 LTS 版本&#xff09;。我们可以通过这里下载并体验&#xff1a;https://nodejs.org/en/download/current/ 在 Node.js 20 中&#xff0c;有非常多的…

ES6 箭头函数的参数和返回值

1.4.2.1 参数问题 1.放入两个参数 const sum (num1,num2) > {return num1 num2 } 2.放入一个参数,()可以省略 const power num > {return num * num } 1.4.2.2 函数内部 1.函数中代码块中有多行代码 const test () >{console.log("hello zzz")console…

CMake学习记录

一、Cmake和Makefile的关系&#xff1a; Cmake用于依据CmakeList.txt生产makefile文件&#xff0c;省去自行编写makefile文件&#xff0c;最终都是要通过make去编译。 很多芯片厂的sdkdemo等都开始用cmake&#xff0c;因此有必要对cmake进行学习。 二、Cmake相关语法&#xff0…

Ubuntu20.04安装CloudCompare及简单使用说明

参考:点云工具CloudCompare安装与使用_瞻邈的博客-CSDN博客 目录 1. 安装方法 1.1. 从官方网址直接下载并安装 1.2. 编译安装 1.3.

FlinkSQL kafka完整案例 可直接复制使用

为自己记录一下flinksql 消费kafka json数据 并写入doris的完整案例 用完发现&#xff0c;flinksql 是真的香。 虽然尽量追求完整&#xff0c;但是从kafka造数据开始写&#xff0c;过于累赘因此省略。正文开始。 单表 kafka原始数据 {"id":1,"name":&q…

SQL Server基础 第四章 select定制查询(select中的各种查询筛选条件)

本章主要介绍 select 语句查询数据的基本用法&#xff0c;其中包括查询指定字段信息、条件查询等。 目录 1、比较运算符、逻辑运算符 &#xff08;1&#xff09;查询phone大于500且不是单县的 &#xff08;2&#xff09;查询地址为烟台或者单县但是phone要大于666的 &#…

Rust之泛型、特性和生命期(一):基本概念

开发环境 Windows 10Rust 1.69.0 VS Code 1.77.3 项目工程 这里继续沿用上次工程rust-demo 泛型、特性和生命期 每种编程语言都有有效处理概念重复的工具。在Rust中&#xff0c;一个这样的工具就是泛型&#xff1a;具体类型或其他属性的抽象替身。我们可以表达泛型的行为或…