Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)

前言

        Spring MVC作为Spring框架中的核心组件之一,其强大的功能在于能简洁高效地处理HTTP请求和响应。在开发Web应用时,理解和正确使用Spring MVC的注解,尤其是@RequestMapping注解,至关重要。本文将详细讲解@RequestMapping注解的使用方法,及其如何绑定请求参数到控制器方法的参数。

一、@RequestMapping注解的使用

@RequestMapping注解是Spring MVC中最常用的注解之一,主要用于处理HTTP请求。它通过建立请求URL和处理方法之间的映射关系,从而确定请求的处理逻辑。

1.1 作用与基本使用

@RequestMapping可以作用在方法上和类上:

  • 作用在类上:指定请求的一级路径。
  • 作用在方法上:指定请求的二级路径。

路径可以省略“/”,表示从应用的根目录开始。

@Controller
@RequestMapping(path = "/role")  // 一级请求路径
public class RoleController {/*** 处理请求 /role/save* method="GET" 指定请求方式* params="请求路径上传的参数"*/@RequestMapping(path = "/save", method = RequestMethod.GET)public String save() {System.out.println("保存角色...");return "suc";}@RequestMapping(value = "/delete")public String delete() {System.out.println("删除角色...");return "suc";}
}

1.2 RequestMapping的属性

@RequestMapping注解的常用属性包括:

  • pathvalue:指定请求的路径。
  • method:指定请求方式,如GET、POST等。
  • params:指定请求参数,当请求包含特定参数时,才会匹配该方法。
@RequestMapping(path = "/save", method = RequestMethod.POST, params = "action=save")
public String save() {// 处理POST请求,且必须包含参数action=savereturn "suc";
}

二、请求参数绑定

Spring MVC提供了自动绑定请求参数到控制器方法的功能。无论是简单的基础类型,还是复杂的JavaBean,Spring都能自动进行类型转换。

2.1 参数绑定机制

当用户提交一个表单时,Spring MVC会自动将表单提交的参数(k=v格式)与控制器方法的参数进行绑定。默认情况下,表单的name属性值与方法的参数名称需要一致。

2.2 支持的数据类型

Spring MVC支持以下类型的请求参数绑定:

  • 基本数据类型:如int, boolean, String等。
  • 实体类型(JavaBean):当参数为一个Java对象时,Spring MVC会将请求参数映射到该对象的属性。
  • 集合类型:如List, Map等集合类。
例子:基本数据类型和JavaBean
@Controller
@RequestMapping("/user")
public class UserController {// 绑定基础数据类型@RequestMapping("/save")public String save(String username, Integer age) {System.out.println("Username: " + username);System.out.println("Age: " + age);return "suc";}// 绑定JavaBean@RequestMapping("/save1")public String save1(User user) {System.out.println(user);return "suc";}// 绑定JavaBean包含对象的情况@RequestMapping("/save2")public String save2(User user) {System.out.println(user);return "suc";}// 绑定JavaBean包含集合的情况@RequestMapping("/save3")public String save3(User user) {System.out.println(user);return "suc";}
}
JSP页面:表单提交
<html>
<head><meta charset="utf-8"><title>请求参数绑定</title>
</head>
<body><h1>基础数据类型绑定</h1><form action="/user/save" method="get"><input type="text" name="username"/><br/><input type="text" name="age"/><br/><input type="submit"/></form><h1>JavaBean绑定</h1><form action="/user/save1" method="post"><input type="text" name="username"/><br/><input type="text" name="age"/><br/><input type="submit"/></form><h1>JavaBean包含对象绑定</h1><form action="/user/save2" method="post"><input type="text" name="username"/><br/><input type="text" name="age"/><br/><input type="text" name="account.money"/><br/><input type="submit"/></form><h1>JavaBean包含集合绑定</h1><form action="/user/save3" method="post"><input type="text" name="username"/><br/><input type="text" name="age"/><br/><input type="text" name="account.money"/><br/><input type="text" name="accounts[0].money"/><br/><input type="text" name="accounts[1].money"/><br/><input type="submit"/></form>
</body>
</html>

2.3 实体类与集合类型的绑定

  • JavaBean:通过nameJavaBean中的属性名匹配进行绑定。如果JavaBean包含其他引用类型,表单字段需要采用对象.属性的方式命名。
  • 集合类型:当表单中包含多个同名参数时,Spring MVC会自动封装成ListMap等集合。

2.4 使用原生ServletAPI对象

除了使用Spring MVC的自动绑定功能外,我们还可以直接使用Servlet API(HttpServletRequestHttpServletResponse等)进行操作:

@RequestMapping(value = "/save6.do", method = RequestMethod.POST)
public String save6(HttpServletRequest request, HttpServletResponse response) {String username = request.getParameter("username");System.out.println("Username: " + username);HttpSession session = request.getSession();System.out.println(session);System.out.println(response);return "suc";
}

三、不常用的注解

3.1 @RequestParam注解

@RequestParam注解用于将HTTP请求中的指定参数绑定到方法参数中。它常用于请求参数的个别处理,特别是当请求参数的名称与方法参数的名称不一致时。

使用方法
@Controller
@RequestMapping("/dept")
public class DeptController {@RequestMapping("/save")public String save(@RequestParam(value = "username", required = false) String name) {System.out.println("Username: " + name);return "suc";}
}
  • value:指定请求参数的名称。
  • required:指定该参数是否必须提供,默认值是true,如果未提供,则抛出MissingServletRequestParameterException

3.2 @RequestParam常见用法

  • 指定请求参数名称
@RequestParam("username")
public String saveUser(@RequestParam("username") String username) {return "suc";
}
  • 设置默认值
@RequestParam(value = "username", defaultValue = "guest")
public String saveUser(@RequestParam("username") String username) {return "suc";
}

结论

        通过@RequestMapping及其相关注解,Spring MVC简化了Web请求的处理过程,使得控制器能够更方便地与请求进行交互。掌握请求参数绑定、@RequestParam的使用方法,以及如何处理表单数据和复杂类型,能帮助我们更高效地开发Web应用。在实际项目中,我们可以根据需求选择合适的注解进行处理,提高开发效率和代码可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/68030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Action和 Func的用法

C#中的数据类型 函数数据类型 Action 是一个数据类型 但是是没有返回值得函数数据类型 Func 用于指定一个有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2执行了");…

C++中的模板(上)

C中的模板(上) 模板参数和函数参数是很像的,函数参数定义的形参对象,而模板参数定义的是类型. 模板分为函数模板和类模板 函数模板 一个交换两个数的函数模板: template<class T> // 此处typename和class是等价的 void Swap(T &a, T &b) {T temp a;a b;b …

MySQL面试题----如何进行 MySQL 数据库备份与恢复

MySQL 数据库备份 1. 使用 mysqldump 工具(逻辑备份) 全量数据库备份 该方式会备份指定数据库中的所有数据和表结构。在命令行中输入以下命令,将 username 替换为你的 MySQL 用户名,password 替换为对应的密码,database_name 替换为要备份的数据库名,backup.sql 为备份文…

Java集合面试总结(题目来源JavaGuide)

问题1&#xff1a;说说 List,Set,Map 三者的区别&#xff1f; 在 Java 中&#xff0c;List、Set 和 Map 是最常用的集合框架&#xff08;Collection Framework&#xff09;接口&#xff0c;它们的主要区别如下&#xff1a; 1. List&#xff08;列表&#xff09; 特点&#xf…

deepseek接入pycharm 进行AI编程

要将DeepSeek接入PyCharm进行AI编程,可以按照以下步骤操作: ### 1. 获取DeepSeek API访问权限 DeepSeek通常以API的形式对外提供服务,你需要在其官方网站注册账号,申请API访问权限。在申请通过后,会获得API密钥(API Key),这是后续调用API的关键凭证。 ### 2. 安装必要…

奥迪改名风波再起,A6L能否率队创下新奇迹

文/王俣祺 导语&#xff1a;春节假期刚过&#xff0c;奥迪的车型命名规则又变了。在如今以内卷为主基调的环境下&#xff0c;车型改名可不是小事&#xff0c;而奥迪的这次调整背后藏着许多深意&#xff0c;也预示着2025年奥迪在产品布局上的新动向。 改名能否“改命” 回溯到…

【怎么用系列】短视频戒除-1-对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面&#xff0c;尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨&#xff0c;慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

改进Transformer,解读Tokenformer论文:基于参数分词化重新思考Transformer的扩展策略

Transformer 训练成本高昂的问题日益凸显&#xff0c;不仅需要耗费巨额的资金与大量的计算资源&#xff0c;还对环境产生了不可忽视的影响&#xff0c;最近由北京大学与谷歌联合发表的一篇论文&#xff0c;为这一棘手难题带来了全新的曙光。论文中提出的创新方案&#xff0c;有…

【STM32】HAL库USB虚拟U盘MSC配置及采用自带的Flash作为文件系统

【STM32】HAL库USB虚拟U盘MSC实现配置及采用自带的Flash作为文件系统 本文将自带的Flash作为文件系统 通过配置USB的MSC功能实现虚拟U盘 没有单独建立FATFS文件系统 仅仅是配置USB和Flash读写而已 当然 这里也可以用外部Flash等等 也可以配置文件系统来进行套壳 但总体而言不如…

Noise Conditional Score Network

NCSN p σ ( x ~ ∣ x ) : N ( x ~ ; x , σ 2 I ) p_\sigma(\tilde{\mathrm{x}}|\mathrm{x}) : \mathcal{N}(\tilde{\mathrm{x}}; \mathrm{x}, \sigma^2\mathbf{I}) pσ​(x~∣x):N(x~;x,σ2I) p σ ( x ~ ) : ∫ p d a t a ( x ) p σ ( x ~ ∣ x ) d x p_\sigma(\mathrm…

jdk8 G1收集器怎么手动调优

在 JDK 8 中&#xff0c;手动调优 G1 垃圾收集器可以通过以下步骤和参数进行&#xff1a; 1. 启用 G1 垃圾收集器 要启用 G1 垃圾收集器&#xff0c;需要在 JVM 启动参数中添加以下选项&#xff1a; -XX:UseG1GC 这个参数告诉 JVM 使用 G1 作为垃圾收集器。 2. 设置堆内存…

Nginx通过设置自定义标记识别代理调用

Nginx通过设置自定义标记识别代理调用 业务场景 最近遇到一个业务场景&#xff0c;部署在云端服务器的一个平台&#xff0c;接口提供给多个现场调用&#xff0c;其中一个现场是通过nginx代理服务器代理转发到云服务器&#xff0c;另外一个现场则是直接通过云服务器接口进行调…

前端知识速记:POST和GET

前端知识速记&#xff1a;POST和GET请求的区别 一、GET请求概述 GET请求是一种用于获取服务器资源的请求方式。**使用GET请求时&#xff0c;数据通过URL传递&#xff0c;适合用于获取数据而不修改资源。**以下是GET请求的一些基本特征&#xff1a; 数据附在URL后面&#xff…

axios如何利用promise无痛刷新token

目录 需求 需求解析 实现思路 方法一&#xff1a; 方法二&#xff1a; 两种方法对比 实现 封装axios基本骨架 instance.interceptors.response.use拦截实现 问题和优化 如何防止多次刷新token 同时发起两个或以上的请求时&#xff0c;其他接口如何重试 最后完整代…

【DeepSeek系列】01 DeepSeek-V1 快速入门

1、DeepSeek简介 2024年底&#xff0c;DeepSeek 相继推出了其第一代推理大模型&#xff1a;DeepSeek-R1-Zero 和 DeepSeek-R1。 DeepSeek-R1-Zero 是一个通过大规模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;训练过程中没有使用监督微调&#xff08;SFT&…

基于LabVIEW的Modbus-RTU设备通信失败问题分析与解决

在使用 LabVIEW 通过 Modbus-RTU 协议与工业设备进行通信时&#xff0c;可能遇到无法正常发送或接收指令的问题。常见原因包括协议参数配置错误、硬件连接问题、数据帧格式不正确等。本文以某 RGBW 控制器调光失败为例&#xff0c;提出了一种通用的排查思路&#xff0c;帮助开发…

【初/高中生讲机器学习】0. 本专栏 “食用” 指南——写在一周年之际⭐

创建时间&#xff1a;2025-01-27 首发时间&#xff1a;2025-01-29 最后编辑时间&#xff1a;2025-01-29 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名高一学生&#xff0c;热爱计…

密云生活的初体验

【】在《岁末随笔之碎碎念》里&#xff0c;我通告了自己搬新家的事情。乙巳年开始&#xff0c;我慢慢与大家分享自己买房装修以及在新家的居住体验等情况。 跳过买房装修的内容&#xff0c;今天先说说这三个月的生活体验。 【白河】 潮白河是海河水系五大河之一&#xff0c;贯穿…

系统通解:超多视角理解

在科学研究和工程应用中&#xff0c;我们常常面临各种复杂系统&#xff0c;需要精确描述其行为和变化规律。从物理世界的运动现象&#xff0c;到化学反应的进程&#xff0c;再到材料在受力时的响应&#xff0c;这些系统的行为往往由一系列数学方程来刻画。通解&#xff0c;正是…

Python爬虫:1药城店铺爬虫(完整代码)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…