请求参数
- 1. 环境准备
- 2. 参数传递
- 2.1 GET请求
- 2.1.1 GET发送一个参数
- 2.1.2 GET发送多个参数
- 2.1.3 GET请求中文乱码
- 2.2 POST请求
- 2.2.1 POST发送一个参数
- 2.2.2 POST发送多个参数
- 2.2.3 POST请求中文乱码问题
- 3. 五种类型参数传递
- 3.1 普通参数
- 3.2 POJO类型参数
- 3.3 嵌套POJO类型参数
- 3.4 数组类型参数
- 3.5 集合类型参数
1. 环境准备
项目结构
pom.xml配置文件
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port> <!--tomcat端口号-->
<path>/</path> <!--虚拟目录-->
</configuration>
</plugin>
</plugins>
</build>
config包下的ServletContainersInitConfig类
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
import javax.servlet.Filter;
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
/**
* 加载springmvc配置类
*
* @return
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
/**
* 设置由springmvc控制器处理的请求映射路径
*
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 加载spring配置类
*
* @return
*/
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
config包下的核心配置文件SpringMvcConfig类
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
controller包下的UserController类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
}
pojo包下的Address类
public class Address {
private String province;
private String city;
// 省略set/get方法
.....
}
pojo包下的User类
public class User {
private String name;
private Integer age;
private Address address;
// 省略set/get方法
....
}
2. 参数传递
2.1 GET请求
2.1.1 GET发送一个参数
UserController类中方法准备
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name){
System.out.println("普通参数传递 name: = " + name );
return "{'module':'commonParam'}";
}
Postman发送GET请求
IDEA控制台接收返回结果
2.1.2 GET发送多个参数
UserController类中方法准备
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name, int age){
System.out.println("普通参数传递 name: = " + name + ", age = " + age);
return "{'module':'commonParam'}";
}
Postman发送GET请求
IDEA控制台接收返回结果
2.1.3 GET请求中文乱码
Postman发送带中文参数的GET请求
IDEA控制台接收返回结果发现存在中文乱码
GET请求方式存在中文乱码问题解决方式:在pom.xml配置文件中添加解决中文乱码的方式
Postman再次发送GET请求,并查看IDEA控制台接收返回结果
2.2 POST请求
2.2.1 POST发送一个参数
UserController类中方法准备
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name){
System.out.println("普通参数传递 name: = " + name );
return "{'module':'commonParam'}";
}
Postman发送带中文的GET请求
IDEA控制台接收返回结果
2.2.2 POST发送多个参数
UserController类中方法准备
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name, int age){
System.out.println("普通参数传递 name: = " + name + ", age = " + age);
return "{'module':'commonParam'}";
}
Postman发送POST请求
IDEA控制台接收返回结果
2.2.3 POST请求中文乱码问题
Postman发送带中文的POST请求
IDEA控制台接收返回结果发现存在中文乱码问题
POST请求方式存在中文乱码问题解决方式:在ServletContainersInitConfig
类中配置过滤器
Postman再次发送POST请求,并查看IDEA控制台接收返回结果
3. 五种类型参数传递
3.1 普通参数
前面的GET请求和POST请求已经对普通参数进行了讲解,在这里不过多阐述。通过要注意一个问题,那就是如果形参与地址参数名不一致如何解决???
IDEA窗口显示如下:可以发现userName为null,因为前端给的是name
,后台接收使用的是userName
,两个名称对不上,导致接收数据失败。
解决方案: 使用@RequestParam注解
Postman再次发送请求
3.2 POJO类型参数
POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
- POJO参数接收,前端GET和POST发送请求数据的方式不变。
- 请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
UserController类中方法准备
Postman发送GET请求
Postman发送POST请求
3.3 嵌套POJO类型参数
嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
请求参数key的名称要和POJO中属性的名称一致,否则无法封装
User类中嵌套Address属性
UserController类中方法准备
Postman发送GET请求
Postman发送POST请求
3.4 数组类型参数
数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数
UserController类中方法准备
Postman发送GET请求
Postman发送POST请求
3.5 集合类型参数
集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
- 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,
@RequestParam
绑定参数关系 - 对于简单数据类型使用数组会比集合更简单些。
UserController类中方法准备
Postman发送GET请求
Postman发送POST请求