SpringMVC获得请求数据
获得请求参数
基本数据类型
获得POJO类型参数
获得数组类型参数
获得集合类型参数
静态资源访问的开启
客户端请求参数的格式是:name=value&name=value.....
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接受如下类型的参数:
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
public class userController {
@RequestMapping("/quick11")
@ResponseBody
public void save11(String username,int age) {
System.out.println(username);
System.out.println(age);
}
}
这个方法不进行页面跳转和回写数据@ResponseBody和void)
然后在网页访问书写参数
就可以看到控制台打印出张三 18,这就是基本数据类型
Controller中的业务方法的pojo参数的属性名与请求参数的name一直,参数值会自动映射匹配
如:
** 上图中的username和age属于User之中的,SpringMVC就会自动将这些值加进User去**
pojo包下的User类
package com.pojo;
public class User {
private int age;
private String username;
public User() {
}
public User(int age, String username) {
this.age = age;
this.username = username;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", username='" + username + '\'' +
'}';
}
}
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
public class userController {
@RequestMapping("/quick12")
@ResponseBody
public void save12(User user) {
System.out.println(user);
}
}
控制台可以看到
Controller的业务方法数组名称与请求参数的name一致,参数值救赎自动映射配置。
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
public class userController {
@RequestMapping("/quick13")
@ResponseBody
public void save13(String[] strs) {
//数组直接打印是地址,为了更清楚看到,用Arrays,asList(作为集合打印)
System.out.println(Arrays.asList(strs));
}
}
网址搜素输入
控制台显示
获得集合参数时,要将集合参数包装到pojo对象才可以
所以我们在pojo包下创建一个vo对象
package com.pojo;
import java.util.List;
public class VO {
private List<User> userList;
public VO(List<User> userList) {
this.userList = userList;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "VO{" +
"userList=" + userList +
'}';
}
}
userController类下
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
public class userController {
@RequestMapping("/quick14")
@ResponseBody
public void save14(VO vo){
System.out.println(vo);
}
}
form.jsp页面下
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
<base href="<%=basepath %>"/>
<meta charset="utf-8"/>
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick14" method="post">
<%--表明是第一个User对象username age--%>
<input type="text" name="userList[0].name"><br/>
<input type="text" name="userList[0].age"><br/>
<input type="text" name="userList[1].name"><br/>
<input type="text" name="userList[1].age"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
运行之后在页面输入数据,控制台输出
获得集合类型参数
当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以是直接接收结合数据而无需使用POJO进行包装。
创建一个js下的
还有ajax.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
<base href="<%=basepath %>"/>
<meta charset="utf-8"/>
<title>Insert title here</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js">
<%-- 创建一个js数组--%>
var userList=new Array();
//给集合添加数据
userList.push({username:"zhangsan",age:18});
userList.push({username:"lisi",age:28});
//发送请求
$.ajax({
type:"POST",//请求方式
url:"${pageContext.request.contextPath}/user/quick15",//请求地址
date:JSON.stringify(userList),//提交的参数,转为json格式
contentType:"application/json;charset=utf-8"
});
</script>
</head>
<body>
</body>
</html>
userController类下
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
public class userController {
@RequestMapping("/quick15")
@ResponseBody
public void save15(@ResponseBody List<User> userList) throws Exception {
System.out.println(userList);
}
}
运行服务器后,发现控制台没有打印数据
一般是页面出现了问题,打开开发者工具中查看
发现是这个jQuery文件找不到
这是静态资源访问权限的问题,解决方式是在spring-mvc中加入
<!-- 静态资源访问权限-->
<mvc:resources mapping="/js/**" location="/js/"/>
重启服务器运行之后就可以访问了,在网络中查看访问包的情况,共有三次请求
运行之后控制台会打印数组中的数据。
也可以在spring-mvc中配置,只需写入一个即可(常用)
<!-- 静态资源访问权限-->
<mvc:default-servlet-handler/>
</beans>
解释:访问资源时,SpringMVC找对应的匹配地址,如果找不到则交给原始的容器(这原始的容器为tomcat)tomcat可以找有能力访问静态资
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_60719453/article/details/125842873
内容来源于网络,如有侵权,请联系作者删除!