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注解的常用属性包括:
path或value:指定请求的路径。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:通过
name和JavaBean中的属性名匹配进行绑定。如果JavaBean包含其他引用类型,表单字段需要采用对象.属性的方式命名。 - 集合类型:当表单中包含多个同名参数时,Spring MVC会自动封装成
List或Map等集合。
2.4 使用原生ServletAPI对象
除了使用Spring MVC的自动绑定功能外,我们还可以直接使用Servlet API(HttpServletRequest,HttpServletResponse等)进行操作:
@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应用。在实际项目中,我们可以根据需求选择合适的注解进行处理,提高开发效率和代码可读性。
相关文章:
Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)
前言 Spring MVC作为Spring框架中的核心组件之一,其强大的功能在于能简洁高效地处理HTTP请求和响应。在开发Web应用时,理解和正确使用Spring MVC的注解,尤其是RequestMapping注解,至关重要。本文将详细讲解RequestMapping注解的使…...
数据结构与算法之栈: LeetCode 641. 设计循环双端队列 (Ts版)
设计循环双端队列 https://leetcode.cn/problems/design-circular-deque/description/ 描述 设计实现双端队列。 实现 MyCircularDeque 类: MyCircularDeque(int k) :构造函数,双端队列最大为 k 。boolean insertFront():将一个元素添加到双端队列头部…...
OpenAI 实战进阶教程 - 第二节:生成与解析结构化数据:从文本到表格
目标 学习如何使用 OpenAI API 生成结构化数据(如 JSON、CSV 格式)。掌握解析数据并导出表格文件的技巧,以便适用于不同实际场景。 场景背景 假设你是一名开发人员,需要快速生成一批产品信息列表(如名称、价格、描述…...
《基于Scapy的综合性网络扫描与通信工具集解析》
在网络管理和安全评估中,网络扫描和通信是两个至关重要的环节。Python 的 Scapy 库因其强大的网络数据包处理能力,成为开发和实现这些功能的理想工具。本文将介绍一个基于 Scapy 编写的 Python 脚本,该脚本集成了 ARP 扫描、端口扫描以及 TCP…...
MiniQMT与xtquant:量化交易的利器
MiniQMT与xtquant:量化交易的利器 在量化交易的世界里,工具的选择至关重要。今天,我们将深入探讨券商版的MiniQMT及其核心组件xtquant的使用技巧和实践心得。MiniQMT以其简洁的操作界面和强大的功能,在量化交易者中颇受欢迎。 技…...
如何实现一个CLI命令行功能 | python 小知识
如何实现一个CLI命令行功能 | python 小知识 在现代软件开发中,命令行界面(CLI)的设计与交互至关重要。Click是一个强大的Python库,专门用于快速创建命令行界面,以其简单易用性和丰富的功能赢得了开发者的青睐。本文将…...
基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)
一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…...
Linux环境下的Java项目部署技巧:环境安装
安装 JDK: 第上传 jdk 压缩安装包到服务器 将压缩安装包解压缩: tar -xvf jdk-8uXXX-linux-x64.tar.gz 配置环境变量: 编辑 /etc/profile 文件,在文件末尾添加以下内容: export JAVA_HOME/path/to/jdk //JAVA_HOME…...
【系统迁移】将系统迁移到新硬盘中(G15 5520)
文章目录 前言问题描述解决步骤(红色为 debug 步骤)参考文献 前言 参数: 电脑 dell g15 5520硬盘:1T 自带硬盘 海力士 2230 -> 2T 西数蓝盘 2280 问题描述 电脑硬盘过小(且只有一个接口),将…...
pytorch实现主成分分析 (PCA):用于数据降维和特征提取
人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...
跨越通信障碍:深入了解ZeroMQ的魅力
在复杂的分布式系统开发中,进程间通信就像一座桥梁,连接着各个独立运行的进程,让它们能够协同工作。然而,传统的通信方式往往伴随着复杂的设置、高昂的性能开销以及有限的灵活性,成为了开发者们前进道路上的 “绊脚石”…...
pytorch实现文本摘要
人工智能例子汇总:AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...
小智 AI 聊天机器人
小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...
MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项
#先登录mysql mysql -uroot -p1234#通过此系统变量,查看当前mysql的版本中默认的日志格式是哪个 show variables like %binlog\_format%;1.2.3 查看 由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查…...
理解DeepSeek源代码之如何安装triton包
DeepSeek选择了开源路线,在github上可以下载到所有的源代码还有参数(数据集应该没有开源),大语言模型的源代码规模其实非常小,DeepSeek V3的模型函数不过804行,阅读源代码有助于更好理解大语言模型。 1. D…...
C++ Primer 标准库类型string
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
网站快速收录:如何优化网站视频内容?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/57.html 为了优化网站视频内容以实现快速收录,以下是一些关键的策略和步骤: 一、高质量内容创作 原创性: 确保视频内容是原创的,避免抄袭或…...
医学图像分割任务的测试代码
测试集进行测试 import os import torch import numpy as np from torch.utils.data import DataLoader from sklearn.metrics import (precision_score,recall_score,f1_score,roc_curve,auc,confusion_matrix, ) import matplotlib.pyplot as plt from utils import NiiData…...
放假前的最后一天
放假前的最后一天了,公司里基本没啥人了。上午整理了整理周报和节后上班要干的事儿。说是下午不用上班了,但是一直没有正式通知。中午出来,准备吃个饭,想吃公司附近的那个驻京办的饭,之前都是一直要排队,因…...
FFmpeg源码:av_base64_decode函数分析
一、引言 Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个…...
为AI聊天工具添加一个知识系统 之83 详细设计之24 度量空间之1 因果关系和过程:认知金字塔
本文要点 度量空间 在本项目(为AI聊天工具添加一个知识系统 )中 是出于对“用”的考量 来考虑的。这包括: 相对-位置 力用(“相”)。正如 法力,相关-速度 体用 (“体”)。例如 重…...
如何配置Java JDK
步骤1:点击资源,点击Java下载 https://www.oracle.com/ 步骤2:点击java下载、JDK23下载,下载第一行第一个 步骤3:解压到一个空文件夹下,复制lib地址 步骤4:在设置里面搜索“高级系统设置”;点击…...
蓝桥杯例题六
奋斗是一种态度,也是一种生活方式。无论我们面对什么样的困难和挑战,只要心怀梦想,坚持不懈地努力,就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验,每一次挫折都是一次锻炼的机会。在困难面前,我…...
MVS pythonSamples 运行环境配置
1.首先计算机:操作系统Win10_X64 22H2; 2.MVS V4.4.0 3.python3.8.8_64; 安装时勾选添加path; 最后安装依赖包:(所有必须安装) 图像处理: mvtec-halcon23050(可选) p…...
深度学习查漏补缺:2. 三个指标和注意力机制
一、bachsize, num_epochs, dataset 在训练卷积神经网络(CNN)或任何其他深度学习模型时,有几个关键参数和概念需要了解:batch size、num epochs 和 dataset。下面是对它们的详细解释: Batch Size(批量大小&…...
CodeGPT使用本地部署DeepSeek Coder
目前NV和github都托管了DeepSeek,生成Key后可以很方便的用CodeGPT接入。CodeGPT有三种方式使用AI,分别时Agents,Local LLMs(本地部署AI大模型),LLMs Cloud Model(云端大模型,从你自己…...
Python3 + Qt5:实现AJAX异步更新UI
使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...
JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...
【深度学习】softmax回归的简洁实现
softmax回归的简洁实现 我们发现(通过深度学习框架的高级API能够使实现)(softmax)线性(回归变得更加容易)。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch …...
基础篇03-图像的基本运算
本节将简要介绍Halcon中有关图像的两类基本运算,分别是代数运算和逻辑运算。除此之外,还介绍几种特殊的代数运算。 目录 1.引言 2. 基本运算 2.1 加法运算 2.2 减法运算 2.3 乘法运算 2.4 除法运算 2.5 综合实例 3. 逻辑运算 3.1 逻辑与运算 …...
