第3章:SpringMVC获取请求参数

news2024/12/19 21:47:46

一、SpringMVC获取请求参数

1.通过servletAPI获取

HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象

<a th:href="@{/testServletAPI(username='admin',password=123456)}">测试API</a>
@Controller
public class ParamController {

   @RequestMapping("/testServletAPI")
   public String testAPI(HttpServletRequest request){
      String username = request.getParameter("username");
      String password = request.getParameter("password");
      System.out.println("username="+username+"password="+password);
      return "success";

   }
}

2.通过控制器方法形参获取请求参数

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参

<a th:href="@{/testServletAPI(username='admin',password=123456)}">测试API</a>
@Controller
public class ParamController {

   @RequestMapping("/testServletAPI")
   public String testAPI(String username, String password){
      System.out.println("username="+username+"-password="+password);
      return "success";
   }
}

如果有重名参数hobby

<form th:action="@{/testServletAPI}">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    爱好:<input type="checkbox" name="hobby" value="java">java
    <input type="checkbox" name="hobby" value="C">c
    <input type="submit" value="提交">
    <br>
</form>

①方法1字符串

输出

username=11-password=111,hobby=java,C

②方法2字符串数组

输出

username=111-password=111,hobby=[java, C]

【注意】

  • 若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数
  • 若使用字符串数组类型的形参,此参数的数组中包含了每一个数据
  • 若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果

3.@ RequestParam请求参数和形参映射关系

  • @RequestParam是将请求参数和控制器方法的形参创建映射关系
  • @RequestParam注解一共有三个属性:
  • value:指定为形参赋值的请求参数的参数名
  • required:设置是否必须传输此请求参数,默认值为true
  • 若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter ‘xxx’ is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
  • defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值
<form th:action="@{/testServletAPI}">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    爱好:<input type="checkbox" name="hobby" value="java">java
    <input type="checkbox" name="hobby" value="C">c
    <input type="checkbox" name="hobby" value="c++">c++
    <input type="submit" value="提交">
    <br>
</form>

①用@RequestParam("username") String name 来获取属性值,默认required = true

@RequestMapping("/testServletAPI")
public String testAPI(@RequestParam("username") String name,@RequestParam("password") String word, @RequestParam("hobby")String[] hobb){
   System.out.println("username="+name+"-password="+word+",hobby="+ Arrays.toString(hobb));
   return "success";
}

删除username会出现错误

 ②@RequestParam(value = "username",required = false) username可以不写

 ③@RequestParam(value = "username",required = true,defaultValue = "admin")

  • 当username为空的时候,此时name 获取的值是“admin”
  • 当username不为空时,name是输入的值

 4、@RequestHeader 请求头信息和形参创建关系

  • @RequestHeader是将请求头信息和控制器方法的形参创建映射关系
  • @RequestHeader注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

测试输出

host:localhost:8080

5、@CookieValue

  • @CookieValue是将cookie数据和控制器方法的形参创建映射关系
  • @CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

 6.通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值。不一致就是空

①创建User.class

 根据form表单创建User的javaBean对象

前端控制器

@RequestMapping("/pojo")
public String TestPojo(User user){
   System.out.println(user);
   return "success";
}

7.解决获取请求参数的乱码问题

解决post获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册

<!--配置springMVC的编码过滤器-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

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

相关文章

MCGS昆仑通态触摸屏导入博途自定义数据类型和DB块变量的具体方法演示

MCGS昆仑通态触摸屏导入博途自定义数据类型和DB块变量的具体方法演示 如下图所示,在博途中新建项目后,添加自己所需的数据类型,然后选中该数据类型,右击选择“从块生成源“—”仅所选块“, 如下图所示,设置文件名后点击保存, 如下图所示,选中需要导出的DB块,右击选…

人事项目开发记录-登录模块

人事项目开发记录 后端接口实现 后端接口实现 后端权限认证采用Spring Security实现&#xff08;本小节中大量知识点与第10章的内容相关&#xff0c;需要读者熟练掌握第10章的内容&#xff09;&#xff0c;数据库访问使用MyBatis&#xff0c;同时使用Redis实现认证信息缓存。因…

如何在Centos的SSH2终端中终止-停止-结束某个Python程序的运行?

python3 /opt/python_scripts/retr/P-0006.py &我在运行上面的命令后&#xff0c;得到了下面的提示&#xff1a; [1] 42335 如果我想终止这个我自己写的Python程序&#xff0c;该怎么做呢&#xff1f; 答&#xff1a; 当您在后台运行一个命令时&#xff0c;终端会显示类似…

Django中使用openldap实现账号的统一管理

了解和安装 ldap ldap介绍 LDAP&#xff08;Lightweight Directory Access Protocol&#xff09;是一种轻量级的目录访问协议&#xff0c;它用于访问和维护分布式目录服务。 LDAP最初设计用于提供对X.500目录服务的简化访问&#xff0c;后来被广泛应用于各种应用程序和系统中…

SpringBoot源码分析:SpringBoot整合Tomcat(三)

一、概述 SpringBoot整合Tomcat整体启动流程如下图&#xff0c;接下来我们就按照改流程分析SpringBoot中内嵌Tomcat的启动流程。 二、启动流程 通过AbstractApplicationContext.refresh方法进入AbstractApplicationContext.onRefresh方法。 之后进入子类ServletWebServerAppl…

Word控件Spire.Doc 【其他】教程(6):从 Word 中提取 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态

Python后退命令&#xff1a;如何让你的程序退回到之前的状态 Python是一种高级编程语言&#xff0c;因其易读易懂而闻名于世。Python中有很多命令用于编写程序&#xff0c;其中一项重要的命令是后退命令。本文将介绍Python后退命令的使用方法&#xff0c;并为您提供详细的步骤…

ChatGPT热度不减!华为宣布入局,盘古GPT能否大杀四方!

ChatGPT热度不减 六月份了&#xff0c;朋友们&#xff0c;来到六月份了已经&#xff0c;ChatGPT的热度依旧不减&#xff0c;各大论坛网站的榜单上还飘着ChatGPT相关话题的文章&#xff0c;且排名靠前。由此可见&#xff0c;这ChatGPT这股子热潮还得持续一段时间呢。 而且ChatG…

cuda block grid等介绍

这里写目录标题 cuda层次结构程序架构层次结构cuda程序调用cuda 内置变量GPU内存模型内存结构 可编程内存内存作用域寄存器本地内存共享内存共享内存访问冲突常量内存全局内存gpu缓存 cuda层次结构 程序架构 申请内存时是线性的内存&#xff0c;需要知道是按行还是按列排列 设计…

【Linux】Linux内核编译与入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Linux内核编译。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&am…

DM数据库TEXT类型字段查询返回时的问题

一、问题描述&#xff1a; 在项目中使用到了DM数据库连接&#xff0c;查询某些数据&#xff0c;然后以Map形式返回时TEXT类型是会出现一些问题&#xff0c;默认会转换为dm.jdbc.driver.DmdbNClob类型的对象&#xff0c;某些情况下&#xff08;不知道具体原因&#xff09;在JSON…

移动端布局之flex布局1:flex布局体验、flex布局原理、flex布局父项常见属性

移动端布局之flex布局1 flex布局体验传统布局和flex弹性布局的区别初体验index.html flex布局原理布局原理 flex布局父项常见属性常见父项属性flex-direction设置主轴的方向&#xff08;重要&#xff09;主轴与侧轴属性值flex-direction: row;flex-direction: row-reverse;flex…

笔试强训9

作者&#xff1a;爱塔居 专栏&#xff1a;笔试强训 文章简介&#xff1a;简单记录学习的细碎~ day15 一. 单选 1.给出数据表 score(stu-id,name,math,english,Chinese), 下列语句正确的是&#xff08; &#xff09; A Select sum(math),avg(chinese) from score B Select *,s…

麒麟V10防火墙,VNC,YUM源, nfs ,磁盘格式化

麒麟V10防火墙&#xff0c;VNC&#xff0c;YUM源&#xff0c; nfs &#xff0c;磁盘格式化 麒麟V10开启防火墙并设置开机自启 启动&#xff1a; systemctl start firewalld 关闭&#xff1a; systemctl stop firewalld 查看状态&#xff1a; systemctl status firewalld 开机禁…

2023年Q1电商平台饮料行业数据分析报告

我国的饮料市场非常庞大&#xff0c;从碳酸饮料到茶饮料&#xff0c;从功能性饮料到水&#xff0c;各个品类都有广泛的消费者基础。加之如今饮料消费场景不断延伸&#xff0c;家庭囤货、户外即饮、运动健身等成为消费者饮料需求的新场景&#xff0c;新需求带动线上饮料市场持续…

Numpy---创建多维数组、创建正态分布、创建均匀分布

1. 创建一个随机整数的多维数组 np.random.randint(low, highNone, sizeNone, dtypel) 参数说明: low : 最小值 highNone: 最大值 highNone时&#xff0c;生成的数值在【0, low&#xff09;区间内 如果使用high这个值&#xff0c;则生成的数值在【low, high&#xff09;区…

Nginx服务——主配置文件-nginx.conf

一、全局配置的6个模块简介 模块说明全局块全局配置&#xff0c;对全局生效events块配置影响 Nginx 服务器与用户的网络连接http块配置代理&#xff0c;缓存&#xff0c;日志定义等绝大多数功能和第三方模块的配置server块配置虚拟主机的相关参数&#xff0c;一个 http 块中可…

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框&#xff08;bboxs&#xff09;与每个默认框&#xff08;…

centos安装etcd

方法1&#xff1a;默认安装&#xff08;不建议&#xff09; 运行命令 yum install etcd 即可&#xff0c;只是安装的etcd版本较低&#xff0c;一般是 etcd-3.3.11&#xff0c;如下图 手动开启etcd&#xff0c;可以看到etcd服务已经开启来了&#xff0c;如下图 特别注意&#x…

Java开发手册中为什么要求谨慎使用ArrayList中的sublist方法

场景 Java开发手册中对于ArrayList的subList的要求如下&#xff1a; 【强制】ArrayList 的 subList 结果不可强转成 ArrayList&#xff0c;否则会抛出 ClassCastException 异常&#xff1a; java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。 说明&a…