第十一节——获取请求数据
Posted 想学习安全的小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一节——获取请求数据相关的知识,希望对你有一定的参考价值。
一、可以从客户端获取的数据类型
- 基本类型参数
- POJO类型参数(JavaBean)
- 数组类型
二、获取数据的方法
Ⅰ、基本数据类型——在controller中的业务方法的参数名称与发送过来的参数名称一致,MVC自动匹配输入
- 编辑main-java-study-controller目录下的UserController.class,定义一个方法
@RequestMapping("/quick1")
@ResponseBody
public void show1(String name,int age) {
System.out.println(name+age);
}
- 启动tomcat,访问http://localhost:8080/demo03_war/quick1?name=qwe&age=12,成功获取到数据
Ⅱ、POJO数据类型——传入的参数是类的属性名称,MVC自动匹配成对象
- 定义一个student类,类的属性有name与age两个属性,且都定义了getter和setter方法
- UserController.class中一个方法的请求参数是student类型
@RequestMapping("/quick1")
@ResponseBody
public void show1(Student student) {
System.out.println(student);
}
- 启动tomcat,访问访问http://localhost:8080/demo03_war/quick1?name=qwe&age=12,MVC成功将数据封装成Student对象
Ⅲ、数组类型——自动匹配
- UserController.class中一个方法的请求参数是string数组,且名称是str
- 启动tomcat,传入连续的且名称都是str的参数,mvc会自动封装成数组,URL:quick1?str=a&str=b&str=c
Ⅳ、集合类型——通过定义一个类,类里面定义一个student类型的list数组,客户端传入参数需要指明第几个数组中的第几个属性
- 定义一个Vo类
public class VO {
private List<Student> vo_list;
public List<Student> getVo_list() {
return vo_list;
}
public void setVo_list(List<Student> vo_list) {
this.vo_list = vo_list;
}
@Override
public String toString() {
return "VO{" +
"vo_list=" + vo_list +
'}';
}
}
- 定义controller
@RequestMapping("/quick1")
@ResponseBody
public void show1(VO vo) {
System.out.println(vo);
}
- 定义一个test.jsp,通过里面的table标签传递数组
<form action="${pageContext.request.contextPath}/quick1" method="post">
<input type="text" name="vo_list[0].name" value="qwe"><br/>
<input type="text" name="vo_list[0].age" value="12"><br/>
<input type="text" name="vo_list[1].name" value="asd"><br/>
<input type="text" name="vo_list[1].age" value="13"><br/>
<input type="submit" value="提交">
</form>
- 开启tomcat,访问jsp/test.jsp页面,点击提交按钮,获取到数据
- 由于quick1需要vo对象的数据,而vo需要student类型的list数组,数组名称是vo_list,所以提交数据时需要指定一致的数组名称,和属性值
Ⅴ、集合类型——使用ajax提交时,指定为contentType的json,MVC通过@RequestBody获取
- 在webapp目录下新建一个js目录,并把jquery-3.3.1导入到js目录中
- 编辑spring-mvc.xml,将jquery添加进去
<mvc:resources mapping="/js/**" location="/js/"/>
或者
<mvc:default-servlet-handler/>
- 修改test.jsp
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>
<script>
var user_list = new Array();
user_list.push({username:"qwe",age:12})
user_list.push({username:"asd",age:13})
$.ajax({
type:"POST",url:"${pageContext.request.contextPath}/quick1",
data:JSON.stringify(vo_list),
contentType:"application/json;charset=utf-8"
});
</script>
</head>
<body>
</body>
</html>
- 使用@RequestBody注解接受ajax数据
@RequestMapping("/quick1")
@ResponseBody
public void show1(@RequestBody List<Student> user_list) {
System.out.println(user_list);
}
Ⅵ、解决POST传入中文的乱码问题
- 编辑web.xml
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Ⅶ、使用@RequestParam注解解决提交参数名称与方法参数不一致问题
- 修改controller
@RequestMapping("/quick1")
@ResponseBody
public void show1(@RequestParam(value = "username") String name) {
System.out.println(name);
}
- 页面提交username参数时,MVC将其转换为name进行封装使用
三、获取数据——Restful
-
图解
-
访问URL时,提交的参数:http://localhost:8080/demo03_war/quick1/zhangsan
-
修改controller
@RequestMapping("/quick1/{name}")
@ResponseBody
public void show1(@PathVariable(value = "name",required = true) String username) {
System.out.println(username);
}
- 启动tomcat访问http://localhost:8080/demo03_war/quick1/zhangsan验证数据
四、获取数据——自定义转换类型
前提:虽然可以将string转换为int,但是对于日期等数据无法自动转换,需要手动配置
- 在main-java-study-converter目录下创建DateConverter.class
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String dateStr) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date =null;
try {
date = format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
- 配置spring-mvc.xml
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="study.converter.DateConverter"/>
</list>
</property>
</bean>
- 编辑controller
@RequestMapping(value = "/quick1")
@ResponseBody
public void show1(Date date) {
System.out.println(date);
}
- 启动tomcat,访问:quick1?date=2021-10-04
以上是关于第十一节——获取请求数据的主要内容,如果未能解决你的问题,请参考以下文章