当前位置: 首页 > news >正文

SpringMVC 学习(四)之获取请求参数

目录

1 通过 HttpServletRequest 获取请求参数

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

3 通过 POJO 获取请求参数(重点)


1 通过 HttpServletRequest 获取请求参数

 public String handler1(HttpServletRequest request)

<form action="${pageContext.request.contextPath}/login/test1" method="get">用户名: <input type="text" name="username"/> <br>密 码: <input type="password" name="password"/> <br><input type="submit" />
</form>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1")public String handler1(HttpServletRequest request) {System.out.println("处理器1");// 通过 HttpServletRequest 获取请求参数String username= request.getParameter("username");String password = request.getParameter("password");System.out.println("username:" + username + " password:" + password);return "success";}
}

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

public String handler1(String username, String password)

<input type="text" name="username"/>
<input type="password" name="password"/>

控制器方法的形参必须和前端 name 的属性值一致,如控制器方法的形参 username 和 password 要和 input 标签中的 name 属性值 username 和 password 一致

<form action="${pageContext.request.contextPath}/login/test1" method="get">用户名: <input type="text" name="username"/> <br>密 码: <input type="password" name="password"/> <br><input type="submit" />
</form>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1")// 通过 形参 获取请求参数public String handler1(String username, String password) {System.out.println("处理器1");System.out.println("username:" + username + " password:" + password);return "success";}
}

        @RequestParam 注解用于将请求参数的数据映射到 Handler 方法(控制器方法)的形参上,相当于给请求参数重命名。如有时有一些特殊情况,前端的 name 属性值与后端 Handler 方法中的形参不一致,这个时候就可以通过 @RequestParam 注解来解决。

语法:@RequestParam(value=”参数名”,required=”true|false”,defaultValue=””)

  • value:请求中传入参数的名称
  • required:该参数是否为必传项,默认为 true,表示该请求路径中必须包含该参数,如果不包含就报错;若设置为 false,则表示该请求路径中不必包含该参数,若没有传输该参数,则注解所标识的形参的值为 null
  • defaultValue:设置默认参数值,如果设置了该值,required=true 将失效,自动为 false,如果没有传该参数,就使用默认值
<form action="${pageContext.request.contextPath}/login/test1" method="get">密 码: <input type="password" name="password"/> <br><input type="submit" />
</form>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1")// 通过 形参 获取请求参数public String handler1(@RequestParam(value = "name", required = true, defaultValue = "赵飞燕") String username,String password) {System.out.println("处理器1");System.out.println("username:" + username + " password:" + password);return "success";}
}

        上述代码中,请求路径中没有请求参数 name,但是 @RequestParam(value = "name", required = true, defaultValue = "赵飞燕") String username,会将默认值 "赵飞燕" 赋值给 username,最终输出 username:赵飞燕 password=123

运行结果

补充:

@RequestHeader 注解

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

@CookieValue 注解

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

3 通过 POJO 获取请求参数(重点)

        POJO 全称“Plain Old Java Object”,意思是“简单 Java 对象”。POJO 的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的 Java 对象。

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

测试案例:用请求参数为以下 User 类中的属性赋值,具体用法请看代码

    // 普通数据
    private String username;
    // 对象
    private UserInfo userInfo;
    // 数组
    private String hobbys[];
    // 列表
    private List<String> titles;
    // Map
    private Map<String, Company> companys

login.jsp

提示:以下代码中 userInfo 是对象,age、height 是它的属性。 hobbys 可以是 hobbsy[0],指定在数组中存放的位置。同理,titles[0] 可以为 titles,不指定在列表中存放的位置,按照请求参数的顺序来。此外,可以不按照顺序来,如第一个 hobbys[0],下一个为 hobbys[2],中间的 hobbys[1] 没有,默认为 null。对于 companys['公司1'].companyName / values,根据 private Map<String, Company> companys,'公司' 是 key,companys['公司1'] 为 value,也就是 Company 对象,companyName、values 是它的属性。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body><form action="${pageContext.request.contextPath}/login/test1" method="get">用户名: <input type="text" name="username" value="赵飞燕"/> <br>年龄: <input type="text" name="userInfo.age" value="18"/> <br>身高: <input type="text" name="userInfo.height" value="168"/> <br>爱好: <input type="checkbox" name="hobbys" value="追剧" checked="checked">追剧<input type="checkbox" name="hobbys" value="画画" checked="checked">画画<input type="checkbox" name="hobbys" value="健身" checked="checked">健身<br>头衔1: <input type="text" name="titles[0]" value="智慧女神"/> <br>头衔2: <input type="text" name="titles[1]" value="幸运之神"/> <br>公司1名称: <input type="text" name="companys['公司1'].companyName" value="肯德基"/> <br>公司1市值: <input type="text" name="companys['公司1'].values" value="12亿"/> <br>公司2名称: <input type="text" name="companys['公司2'].companyName" value="黑马"/> <br>公司2市值: <input type="text" name="companys['公司2'].values" value="15亿"/> <br><input type="submit" /></form>
</body>

User 类

public class User {// 普通数据private String username;// 对象private UserInfo userInfo;// 数组private String hobbys[];// 列表private List<String> titles;// Mapprivate Map<String, Company> companys;// setter、getter 方法省略
}

控制器 MyController

@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1")// 通过 形参 获取请求参数public String handler1(User user) {String username = user.getUsername();int age = user.getUserInfo().getAge();int height = user.getUserInfo().getHeight();String hobbys[] = user.getHobbys();List<String> titles = user.getTitles();Map<String, Company> companys = user.getCompanys();// 普通参数System.out.println("用户姓名:" + username);// 对象System.out.println("用户年龄:" + age);System.out.println("用户身高:" + height);// 数组System.out.print("用户爱好:");for(String hobby : hobbys) {System.out.print(" " + hobby);}System.out.println();// ListSystem.out.print("称号:");for(String title : titles) {System.out.print(" " + title);}System.out.println();// MapSet<Map.Entry<String, Company>> entries = companys.entrySet();for (Map.Entry<String, Company> entry : entries) {System.out.println(entry.getKey() + ":" + entry.getValue().getCompanyName() + "市值:" + entry.getValue().getValues());}return "success";}
}

company 类

public class Company {private String companyName;private String values;// setter、getter 方法省略
}

Userinfo 类

public class UserInfo {private int age;private int height;// setter、getter 方法省略
}

执行结果

http://www.lryc.cn/news/307040.html

相关文章:

  • 多模态表征—CLIP及中文版Chinese-CLIP:理论讲解、代码微调与论文阅读
  • Git本地分支关联远程分支
  • [FT]chatglm2微调
  • AI赋能Oracle DBA:以自然语言与Oracle数据库互动
  • Django学习记录04——靓号管理整合
  • AD9226 65M采样 模数转换
  • 远程控制桌面,让电脑办公更简单
  • 猫头虎分享已解决Bug || 网络连接问题:NetworkError: Failed to fetch
  • Layer1 明星项目 Partisia Blockchain 何以打造互操作、可创新的数字经济网络
  • 用CSS制作弧形卡片的三种创意方法!
  • 守护健康之光 —— 小脑萎缩患者的生活指南
  • CSS选择器:让样式精确命中目标
  • 前端不传被删记录的id怎么删除记录,或子表如何删除记录
  • axios的基本特性用法
  • 打印水仙花数---c语言刷题
  • springboot基础(82):分布式定时任务解决方案shedlock
  • 【Golang】Gorm乐观锁optimisticlock的使用
  • Apache Doris 发展历程、技术特性及云原生时代的未来规划
  • 2024-02-26(Spark,kafka)
  • RubyMine 2023:让Ruby编程变得更简单 mac/win版
  • 低功耗设计——门控时钟
  • 《凤凰架构》-本地事务章节 读书笔记
  • ruby对比python,30分钟教程
  • C语言——oj刷题——判断闰年
  • Git笔记——3
  • C++面试 -操作系统-安全能力:死锁的危害、出现原因、解决方法
  • 台湾香港澳门媒体宣发稿报道有哪些平台资源,跨境出海推广新闻营销公司告诉你
  • Python分支和循环结构及其应用(文末送书)
  • 机器学习——线性代数中矩阵和向量的基本介绍
  • 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用