Spring MVC 请求参数绑定

news2024/10/1 9:37:40

文章目录

    • 默认⽀持 Servlet API 作为⽅法参数
    • 绑定简单类型参数
    • 绑定Pojo类型参数
    • 绑定⽇期类型参数(需要配置⾃定义类型转换器)
    • 路径变量参数

Spring MVC 是一个用于构建 Web 应用程序的框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 Spring MVC 中,请求参数绑定是将 HTTP 请求中的参数映射到控制器方法的参数上的过程。Spring MVC 提供了多种方式来实现请求参数绑定。
请求参数绑定:说⽩了SpringMVC如何接收请求参数
http协议(超⽂本传输协议)
原⽣servlet接收⼀个整型参数:

String ageStr = request.getParameter("age");
Integer age = Integer.parseInt(ageStr);

SpringMVC框架对Servlet的封装,简化了servlet的很多操作
SpringMVC在接收整型参数的时候,直接在Handler⽅法中声明形参即可

@RequestMapping("xxx")
public String handle(Integer age) {
	System.out.println(age);
}

参数绑定:取出参数值绑定到handler⽅法的形参上

默认⽀持 Servlet API 作为⽅法参数

当需要使⽤HttpServletRequest、HttpServletResponse、HttpSession等原⽣servlet对象时,直接在handler⽅法中形参声明使⽤即可。

/**
*
* SpringMVC 对原⽣servlet api的⽀持 url:/demo/handle02?id=1
*
* 如果要在SpringMVC中使⽤servlet原⽣对象,⽐如
HttpServletRequest\HttpServletResponse\HttpSession,直接在Handler⽅法形参中声
明使⽤即可
*
*/
@RequestMapping("/handle02")
public ModelAndView handle02(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
    String id = request.getParameter("id");
    Date date = new Date();
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("date",date);
    modelAndView.setViewName("success");
    return modelAndView;
}

绑定简单类型参数

在 Spring MVC 中,您可以通过将控制器方法的参数与 HTTP 请求中的参数名匹配来进行简单参数的请求参数绑定。
简单数据类型:⼋种基本数据类型及其包装类型
参数类型推荐使⽤包装数据类型,因为基础数据类型不可以为null。
整型:Integer、int
字符串:String
单精度:Float、float
双精度:Double、double
布尔型:Boolean、boolean
说明:对于布尔类型的参数,请求的参数值为true或false。或者1或0
注意:绑定简单数据类型参数,只需要直接声明形参即可(形参参数名和传递的参数名要保持⼀致,建议 使⽤包装类型,当形参参数名和传递参数名不⼀致时可以使⽤@RequestParam注解进⾏⼿动映射)

    /*
    * SpringMVC 接收简单数据类型参数 url:/demo/handle03?id=1
    *
    * 注意:接收简单数据类型参数,直接在handler⽅法的形参中声明即可,框架会取出参数值
    然后绑定到对应参数上
    * 要求:传递的参数名和声明的形参名称保持⼀致
    */
    @RequestMapping("/handle03")
    public ModelAndView handle03(@RequestParam("ids") Integer id,Boolean flag) {
        Date date = new Date();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }

绑定Pojo类型参数

自动请求参数绑定:Spring MVC 还支持自动将请求参数绑定到对象上。例如,您可以创建一个 POJO(Plain Old Java Object)类,将其属性与请求参数名相匹配,Spring MVC 将自动将请求参数绑定到这个对象上。

    /*
    * SpringMVC接收pojo类型参数 url:/demo/handle04?id=1&username=zhangsan
    *
    * 接收pojo类型参数,直接形参声明即可,类型就是Pojo的类型,形参名⽆所谓
    * 但是要求传递的参数名必须和Pojo的属性名保持⼀致
    */
    @RequestMapping("/handle04")
    public ModelAndView handle04(User user) {
        Date date = new Date();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }
  • 绑定Pojo包装对象参数

包装类型 QueryVo

public class QueryVo {
    private String mail;
    private String phone;
    // 嵌套了另外的Pojo对象
    private User user;
    public String getMail() {
    	return mail;
    }
    public void setMail(String mail) {
    	this.mail = mail;
    }
    public String getPhone() {
    	return phone;
    }
    public void setPhone(String phone) {
    	this.phone = phone;
    }
    public User getUser() {
    	return user;
    }
    public void setUser(User user) {
    	this.user = user;
    }
}

Handler⽅法

    /*
    * SpringMVC接收pojo包装类型参数 url:/demo/handle05?
    user.id=1&user.username=zhangsan
    * 不管包装Pojo与否,它⾸先是⼀个pojo,那么就可以按照上述pojo的要求来
    * 1、绑定时候直接形参声明即可
    * 2、传参参数名和pojo属性保持⼀致,如果不能够定位数据项,那么通过属性名 + "." 的
    ⽅式进⼀步锁定数据
    *
    */
    @RequestMapping("/handle05")
    public ModelAndView handle05(QueryVo queryVo) {
        Date date = new Date();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }

绑定⽇期类型参数(需要配置⾃定义类型转换器)

  • 前端jsp

在这里插入图片描述

  • 后台Handler⽅法
    /**
    * 绑定⽇期类型参数
    * 定义⼀个SpringMVC的类型转换器 接⼝,扩展实现接⼝接⼝,注册你的实现
    * @param birthday
    * @return
    */
    @RequestMapping("/handle06")
    public ModelAndView handle06(Date birthday) {
        Date date = new Date();ModelAndView modelAndView = new
        ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }
  • ⾃定义类型转换器
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author 应癫
* ⾃定义类型转换器
* S:source,源类型
* T:target:⽬标类型
*/
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
    // 完成字符串向⽇期的转换
    SimpleDateFormat simpleDateFormat = new
    SimpleDateFormat("yyyy-MM-dd");
    try {
    Date parse = simpleDateFormat.parse(source);
    return parse;
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return null;
    }
}
  • 注册⾃定义类型转换器
<!--
⾃动注册最合适的处理器映射器,处理器适配器(调⽤handler⽅法)
-->
<mvc:annotation-driven conversionservice="conversionServiceBean"/>
<!--注册⾃定义类型转换器-->
<bean id="conversionServiceBean"
  class="org.springframework.format.support.FormattingConversionServiceF
  actoryBean">
  <property name="converters">
    <set>
      <bean class="com.zjq.converter.DateConverter">
      </bean>
    </set>
  </property>
</bean>

路径变量参数

除了请求参数绑定,Spring MVC 还支持路径变量的绑定。路径变量是在 URL 中包含的变量,可以通过 @PathVariable 注解来绑定到控制器方法的参数上。

@Controller
@RequestMapping("/example")
public class ExampleController {

    @RequestMapping("/process/{id}")
    public String processRequest(@PathVariable("id") Long id) {
        // 使用路径变量 id 进行处理
        
    }
}

在上述示例中,@PathVariable 注解用于将路径变量 “id” 绑定到控制器方法的参数 “id” 上。

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

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

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

相关文章

【java】【SpringBoot】【三】开发实用篇 基于SpringBoot整合任意第三方技术

目录 一、热部署 1、手动启动热部署 2、自动启动热部署 3、热部署范围配置 4、关闭热部署 二、配置高级 1、ConfigurationProperties 2、宽松绑定/松散绑定 3、常用计量单位绑定 4、数据校验 三、测试 1、加载测试专用属性 2、加载测试专用配置 3、web环境模拟测…

Delft3D水动力与泥沙运动模拟教程

详情点击公众号链接&#xff1a;Delft3D水动力与泥沙运动模拟教程 前沿 1.Delft3D水动力&#xff0d;泥沙模型的基本原理&#xff1b; 2.Delft3D模型正价曲线网格和边界条件构建方法&#xff1b; 3.Delft3D模型水动力及泥沙模块使用方法&#xff1b; 4.Delft3D模型泥沙运动…

数据库----- 数据库高级

1.2 多表查询分类 将多个表的数据横向的联合起来。 1、 内连接 2、 外连接 a) 左外连接 b) 右外连接 3、 交叉连接 4、 自然连接 1.2.1 内连接【inner join】 语法一&#xff1a;select 列名 from 表1 inner join 表2 on 表1.公共字段表2.公共字段语法二&#xff1a;select …

PMP考试如何报名?麻烦吗?

还是比较麻烦的&#xff0c;PMP考试不是国内的考试&#xff0c;要报两次名&#xff0c;报名条件也很严格&#xff0c;PMP考试报名需要先在PMI网站进行英文报名&#xff0c;英文报名成功后才能在中国国际人才交流基金会网站进行中文报名&#xff0c;具体说明如下。 一、PMP考试…

求链表的倒数第k个节点

思路&#xff1a;利用快慢指针空间差 代码&#xff1a; struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code herestruct ListNode* slow pListHead;struct ListNode* fast pListHead;while(k--){if(fastNULL){return NULL;}fastfast->…

CentOS7.9安装mysql8.0

网上各种安装教程五花八门&#xff0c;各种报错&#xff0c;所以整理了一个完整版本&#xff0c;以下教程作者在2台新服务器测试安装均无问题。 一.下载mysql 下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 或者直接执行命令 wget htt…

乐观锁与悲观锁

概述 悲观锁总会假设最坏的情况&#xff0c;乐观锁总会假设最好的情况。悲观锁和乐观锁最终都是为了保证线程的安全&#xff0c;避免在并发场景下的资源竞争问题&#xff0c;但是&#xff0c;相对于乐观锁&#xff0c;悲观锁对性能的影响更大&#xff01; 悲观锁 共享资源每…

操作系统权限提升(二十六)之数据库提权-MySQL UDF提权

MySQL UDF提权 MySQL介绍 MySQL是最流行的开放源码SQL数据库管理系统&#xff0c;相对于Oracle&#xff0c;DB2等大型数据库系统&#xff0c;MySQL由于其开源性、易用性、稳定性等特点&#xff0c;受到个人使用者、中小型企业甚至一些大型企业的广泛欢迎&#xff0c;MySQL具有…

点大商城V2_2.5.0 全开源独立版 商家自营+多商户入驻 百度+支付宝+QQ+头条+小程序端+unipp开源前端

点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本程序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xff0c;并且有VUE全端代码。分销&am…

log4j2原理分析及漏洞复现CVE-2021-44228

文章目录 log4j2原理分析及漏洞复现0x01 log4j2简介Log4j2 特点Log4j2组件的应用 0x02 CVE-2021-44228漏洞简介&#xff1a;漏洞适用版本漏洞原理lookup功能jndi解析器jndi是什么ldap服务RMI 0x03攻击过程0x04漏洞复现漏洞环境1.访问靶机2.dns回显验证3.将bash反弹shell命令编码…

职业观察|02:铁路维修师

高铁及地铁的发展&#xff0c;新生了许多之前没有的职位和专业。除了空乘/铁乘、安检人员等&#xff0c;大家可能相对熟悉。背后的维系工作人员其实也是一群更庞大的从业人员。本次主要介绍“铁路机务”。以下由一位铁路机务小哥讲述。 首先简单介绍一下铁路系统&#xff08;包…

准备我们心爱的IDEA写Jsp

JSP学习 一、准备我们心爱的IDEA new一个项目&#xff1a;New Project --> Next -->Next -->Finsh 二、配置好服务器Tomcat-9.0.30 1.> 在WEB-INF下创建一个Lib包 将jsp-api.jar复制进去&#xff0c;并使其生效 未生效前&#xff1a; 生效过程&#xff1a; 2.>…

VLAN相关知识点

文章目录 前言VLANVLAN数据帧格式QinQ报文封装格式总结 前言 本博客仅做学习笔记&#xff0c;如有侵权&#xff0c;联系后即刻更改 科普&#xff1a; 参考网址 VLAN VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网 是将一个物理的LAN在逻辑上划分成多…

Filebeat+Kafka+ELK搭建

---------------- FilebeatKafkaELK ---------------- 1.部署 ZookeeperKafka 集群 &#xff08;前面已经配过 20.0.0.101、20.0.0.102、20.0.0.103&#xff09; https://blog.csdn.net/m0_56509725/article/details/132908696?spm1001.2014.3001.55011.1 配置ELK 在&#xf…

阿里云负载均衡配置只能域名访问

1.选择虚拟服务器组》创建虚拟服务器组 2.点击创建虚拟服务器组》输入虚拟服务器组名称&#xff0c;注意&#xff1a;不要添加服务器&#xff0c;直接点击创建 3.在点击创建虚拟服务器组》输入虚拟服务器组名称》添加服务器&#xff08;后端服务器&#xff09;》创建 1.添加监…

WhatsOnChain中的sCrypt合约验证插件

我们很高兴地宣布在 WhatsOnChain 上集成了 sCrypt 智能合约验证插件。该插件允许任何人为已部署的智能合约提交和验证 sCrypt 代码。 智能合约验证 在与智能合约交互之前&#xff0c;用户需要确保智能合约按照其声称的方式行事。理论上&#xff0c;每个人都可以查看合约并验…

脸鉴AI开放平台:轻松上手的人工智能算法

序言 一、提升开发效率工具 1.1封装view窗口 1.2封装常用功能接口 1.3提供基础接口代码块 二、使用介绍 2.1 注册&登录 2.2 新建应用 2.3 下载应用 2.4 安装包介绍 2.5 demo项目 2.6 配置demo 2.7 运行demo 三、使用结果 3.1 摄像头采集人脸添加模板 3.2 实时画面1:N人脸检…

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…

c#用Gnuplot画图源码

直接调用这个类即可&#xff0c;需要下载个GnuPlot安装下。 // Author: Leonardo Tazziniusing System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms;/// <summary> /// Tested with Gnuplot 5.2 /// </summary&g…

【Unity实战】从零手戳一个库存背包系统

文章目录 前言素材开始一、绘制背包UI二、背包开启关闭三、初始化背包网格四、 添加物品五、 拖拽交换功能物品六、 物品拆分七、 物品堆叠八、 拖拽还原九、 引入字典存储数据十、 拾取物品十一、 丢弃物品 最终效果源码完结 前言 库存背包系统是大多数游戏的关键部分&#x…