可以获取请求的参数:
- 基本类型的参数。
- pojo类型的参数。
- 数组类型的参数。
- 集合类型的参数。
获取基本类型的参数:
Controller中业务方法的参数名称只要请求参数的名称一致,参数就会映射匹配。
请求地址:
示例代码:
@GetMapping("/save13")
@ResponseBody
private String jkk1(String name,int age){
//普通数据类型的转换
//要在spring-mvc中进行处理中文乱码的问题
System.out.println(name);
return name;
}
会出现请求中文乱码的问题,需要在web.xml中进行匹配,后面会进行介绍。
获取pojo类型的参数
pojo类的代码:
public class Student {
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", age=" + age +
'}';
}
}
controller层的代码:
@GetMapping("/save12")
@ResponseBody
private void jkk(Student student){
System.out.println(student);
}
获取数组类型的参数:
请求地址和contrroller层的代码:
获取集合类型的参数:
获取集合类型的参数的时候,需要将集合参数包装到pojo类中才能接收。
获取list集合的参数:
请求路径:
一般都是通过get请求进行发送的
jsp发送请求的页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
表单提交的过程中需要注意的是 因为集合是有下标的,所以文本框的name属性的值是以list[0].nname的形式进行书写的。
pojo类:
public class Vo {
private List list;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
@Override
public String toString() {
return "Vo{" +
"list=" + list +
'}';
}
}
controller层的代码:
@PostMapping("/save13")
@ResponseBody
private void shdsjjd(Vo vo){
System.out.println(vo.getList());
}
@RequestBody注解
上面获取集合类型的参数过于繁琐,springMVC的@RequestBody注解可以大幅度简化上面的开发。
代码:
@PostMapping("/save14")
@ResponseBody
public void save14(@RequestBody List list){
System.out.println(list);
}
使用上面的注解可以不使用pojo类spring框架就会自动将其传入的参数封装成集合
请求数据乱码的问题:
可以通过配置全局过滤器来解决
在web.xml文件配置过滤器的代码:
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
在请求数据中文乱码的问题中,post请求会出现中文乱码的问题,而get请求不会出现中文乱码的问题原因是tomacte服务器会帮我们进行解决。
参数绑定的注解:
如果客户端传入的参数和业务方法中参数名不相同的话,spring就不会帮我们进行自动封装 ,有些时候我们可能因为业务的要求不能保证参数保持一致所以要使用参数绑定来解决。
业务方法的代码:
@GetMapping("/save15")
@ResponseBody
private void sjd(@RequestParam("name") String username){
System.out.println(username);
}
@RequestParam注解中参数介绍
需要在@RequestParam("name")注解中添加上请求参数的名称,用于指明请求中的那个参数
与业务方法中的参数进行绑定。
获取Restful类型的参数
Restful是一种架构风格,一中设计风格,不是必须使用的标准。
Restful风格的请求是使用“url+请求方式”表示一次请求的目的,HTTP中四个请求方式:
- get:是用于获取资源
- post:用于新建资源
- put:用于更新资源
- delete:用于删除资源
具体实例:
- /user/1 get 得到id=1,的资源
- /user/1 delete 删除id=1,的资源
- /user/1 put 更新id=1,的资源
- /user post 新建资源
获得Restfor的请求参数:
可以通过占位符来获得请求参数,、/user/1 可以在设置虚拟路径的地方进行设置占位符:”/user/{name}” 然后在入参的地方再进行参数绑定。
代码:
@RequestMapping("/user2/{name}")
@ResponseBody
private void sdsdpsdp(@PathVariable(value = "name",required = true) String age){
System.out.println(age);
}
其中“/user/{****}” @PathVariable(value=”***”) 这两个地方的**必须一样
其它的不需要一样
自定义类型转换器:
springMVC默认提供了一些常用的类型转换器,例如客户端提交的字符串可以转换成int型的参数进行参数的设置【客户端向服务端进行调用的时候,之间传输的参数都使用字符串来进行传输的】String 转换成int型是可以,但是有一些需要自己定义就比如日期等。
自定义类型转化器的步骤:
- 自定义类型转换器类实现Converter接口。
- 在spring-web中配置文件中声明转换器。
- 在注解驱动器中进行自定义类型转换器。
自定义类型转换器类的代码:
public class DateConverter implements Converter {//泛型中的参数第一个参数是 传入的数据类型,第二个参数是需要转换的参数
@Override
public Date convert(String source) {
//设置日期对象的格式并返回对象jin'xi
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM--dd");
Date date = null;
try {
//解析上面穿入的字符串来进行转换成data的类型
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
注意Converter
接口中泛型的选择,还有实现String类型到Date类型的转换。
在spring-web.xml文件中声明类型转换器【使用依赖注入】
转换器工厂。
可以在list标签中进行注入多个自定义类型转换器
在注解驱动器中进行注册【也就是设置Bean后进行调用】
经过上述的配置后业务方法中参数有Date类型的参数spring就会进行自动的调用自定义类型转换器。
@RequestHeader 注解获取请求头的信息
使用@RequestHeader可以获得请求头的信息,相当于Web阶段学习的getHead()
@RequestHeader 注解注解的属性:
Value :表示请求头的名称
Required: 表示是否必须携带请求头
实例代码:
@GetMapping("/save17")
@ResponseBody
private void sdsdslpx(@RequestHeader(value = "host" ,required = true) String host){
System.out.println(host);
}
@CookieValue注解可以获取指定的cookie的值
@CookieValue注解的属性:
Value 表示指定cookie的名称
Required 表示是否必须携带此cookie
实例:
获取JSSIONID的值