写在前面:
记录自己的SpringMVC学习之旅,若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
2.4 数据请求
2.4.1 获得请求参数
客户端请求参数格式为:name = value & namae =value……
服务器端要获得请求参数,有时还需要进行数据的封装,SpringMVC可以接收如下数据类型参数:
- 基本数据类型参数
- POJO类型参数
- 数组类型参数
- 集合类型参数
2.4.2 获得基本数据类型参数
Controller中的业务方法的参数名称要与请求参数的名称一样,参数值会自动进行映射匹配。
前台请求参数方式为:
http://localhost:8080/datarequest1?userName=tom&age=20
一般后台controller中业务方法用对应的参数名称即可,如图
2.4.3 获得POJO类型参数
Controller中的方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配!
一般请求url为:http://localhost:8080/datarequest2?userName=tom&age=30
而controller业务方法参数改为对应的对象即可。
2.4.4 获得数组型参数
Controller中的方法数组名称与请求参数的name一致,参数值会自动映射匹配!
一般请求url为:
http://localhost:8080/datarequest3?str=11&str=22str=33&str=44
而controller业务方法参数改为数组即可,如图
2.4.5 获取集合类型参数
2.4.5.1 POJO对象
获得集合参数时要将集合参数包装到一个POJO对象中,一般是VO命名。如图
然后就跟获得POJO 类型参数一样操作了。
2.4.5.2 Ajax方式
当使用ajax提交时,可以指定contenType为JSON格式,那么在方法参数位置使用@RequestBody可以直接收集集合数据而不用POJO对象进行封装。
2.4.6 代码操作
2.4.6.1 项目准备
根据[### 2.1.4 项目搭建]步骤搭建好项目并补全缺失目录,然后新建User实体类!
2.4.6.2 获取基本数据类型
在controller类中书写业务方法,如下:
// 将前台传来的数据进行打印输出
@RequestMapping(value = "/datarequest1")
@ResponseBody
// 不进行页面跳转,也不需要数据回写,仅仅是数据展示
public void dataRequest(String userName,int age)
{
System.out.println(userName);
System.out.println(age);
}
运行项目后,如图操作
进行参数传递,回车后可在控制台看到前台的数据请求,如图
2.4.6.3 获取POJO类型参数
新建User类对象,并进行封装,如图
业务方法如下:
// 将前台传来的POJO数据进行打印输出
@RequestMapping(value = "/datarequest2")
@ResponseBody
// 不进行页面跳转,也不需要数据回写,仅仅是数据展示
public void dataRequest2(User user)
{
System.out.println(user);
}
同上操作后可看到控制台输出对应的信息,如图
2.4.6.4 获取数组类型参数
业务方法:
// 将前台传来的数组数据进行打印输出
@RequestMapping(value = "/datarequest3")
@ResponseBody
// 不进行页面跳转,也不需要数据回写,仅仅是数据展示
public void dataRequest2(String [] str)
{
System.out.println(Arrays.asList(str));
}
同相应操作后可看到控制台输出对应的信息,如图
2.4.6.5 获取集合类型参数
2.4.6.5.1 用POJO对象
新建VO类作为集合 的POJO对象
业务方法为:
// 将前台传来的集合数据进行打印输出
@RequestMapping(value = "/datarequest4")
@ResponseBody
// 不进行页面跳转,也不需要数据回写,仅仅是数据展示
public void dataRequest4(VO vo)
{
System.out.println(vo);
}
由于是集合对象,不好 像之前一样直接操作,所以用post提交表单形式来操作。新建demo.jsp,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/datarequest4" method="post">
<input type="text" name="userList[0].userName"/><br>
<input type="text" name = "userList[0].age"/><br>
<input type="text" name="userList[1].userName"/><br>
<input type="text" name = "userList[1].age"/><br>
<input type="submit" value="提交">
</form>
</body>
</html>
进行操作后可在控制台看到输出,如图
2.4.6.5.2 用JSON
开启静态资源访问权限,在spring-mvc.xml中进行配置,如下:
<!-- 静态资源访问权限开启-->
<mvc:default-servlet-handler/>
<!-- <mvc:resources mapping="/js/**" location="/js/"/>-->
新建jsp文件,用ajax构建数据,如下:
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.4.1.min.js"></script>
<script>
var userList = new Array();
userList.push({userName:"tom",age:32});
userList.push({userName:"jerry",age:22});
$.ajax({
type:'post',
url:"${pageContext.request.contextPath}/datarequest5",
data:JSON.stringify(userList),
contentType:"applicatoin/json;charset=UTF-8"
});
</script>
业务方法如下:
// 将前台传来的集合数据进行打印输出 JSON格式
@RequestMapping(value = "/datarequest5")
@ResponseBody
// 不进行页面跳转,也不需要数据回写,仅仅是数据展示
public void dataRequest5(@RequestBody List<User> userList)
{
System.out.println(userList);
}
2.4.7 参数绑定注解@RequestParam
2.4.7.1 @RequestParam介绍
当请求的参数名称与Controller的业务方法参数名称不一样时,可用@RequestParam注解显示地绑定。
一般有三个参数,如下:
- value.即要绑定的参数名称
- required.是布尔类型参数,true为默认,为必须要绑定,没有此参数会报错
- defaultValue.参数默认值,没有任何参数绑定时使用
2.4.7.2 代码操作
表单页面如下:
<form action="${pageContext.request.contextPath}/datarequest6" method = "post">
<input type="text" name="name"><br/>
<input type="submit" name="提交"><br/>
</form>
Controller类方法如下:
@RequestMapping("/datarequest6")
@ResponseBody
public void dataRequest6(@RequestParam(value = "name",required = false,defaultValue="demo") String userName)
{
System.out.println(userName);
}
同样如图操作后
可在控制台看到结果
2.4.8 获取Restful类型风格参数
2.4.8.1 Restful类型介绍
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于
客户端和服务器端交互类的软件,基于这个风格设计的软件可以更简洁、更有层次,更易于实现缓存机制。
2.4.8.2 要求
风格要求:URL+请求方式
HTTP协议里四个表示操作方式的动词如下:
- GET,用于获取资源
- POST,用于新建资源
- PUT,用于更新资源
- DELETE,用于删除资源
比如: - /user/1 GET: 得到id = 1 的User
- /user/1 DELETE: 删除id = 1 的User
- /user/1 PUT: 更新id = 1 的User
- /user/1 POST:新增User
2.4.8.3 使用
SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
2.4.8.4 代码实现
controller类中业务方法如下:
// Restfule类型风格参数
@RequestMapping("/datarequest7/{name}")
@ResponseBody
public void dataRequest7(@PathVariable(value = "name",required = true) String userName)
{
System.out.println(userName);
}
在浏览器页面做如图操作
后可在控制台看到对应的结果