(5)请求参数==》五种普通参数
1.普通参数
- 代码块
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'commonParam'}";
}
-
GET请求==》中文不会乱码
-
POST==》中文会发生乱码
- 在servlet配置类中配置过滤器,若过滤规则有多种以逗号分割
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
-
-
※※※请求参数命名和后台参数命名必须一致,否则导致接受参数失败
-
使用@RequestParam参数进行映射
-
2.POJO参数==》当请求参数较多时使用pojo参数作为请求参数
- 定义pojo类和对应的控制器
public class User { private String name; private int age; setter、getter... } @RequestMapping("/pojoParam") @ResponseBody public String pojoParam(User user) { System.out.println("pojo参数传递 user ==> " + user); return "{'module':'pojoParam'}"; }
-
发送请求
-
参数获取失败,这是由于pojo类未定义setter方法
- ※※※请求参数名必须和pojo类属性名一一对应,否则接收失败
3.嵌套pojo参数
- pojo类+控制器
public class User {
private String name;
private int age;
private Address address;
setter、getter...
}
public class Address {
private String city;
private String province;
setter、getter...
}
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user) {
System.out.println("嵌套pojo参数传递 user ==> " + user);
return "{'module':'pojoParam'}";
}
4.数组类型参数
5.集合参数
- 控制器
@RequestMapping("/listParam")
@ResponseBody
public String listParam(List<String> hobby) {
System.out.println("集合类型参数传递 hobby ==> " + hobby);
return "{'module':'listParam'}";
}
-
会发现会报错==》SpringMVC将List看做是一个POJO对象来处理,将其创建一个对象并准备把前端的数 据封装到对象中,但是List是一个接口无法创建对象,所以报错。
-
同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
(6)JSON数据类型请求参数
1.JSON普通数组
- 添加Jackson依赖
<!--导入Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.4</version>
</dependency>
- 在SpringMVCConfig配置类中使用@EnableWebMvc开启json数据自动转换,里面就包含了将JSON转换成对象的功能。
@Configuration
@ComponentScan({"requestParam.controller"})
@EnableWebMvc
public class SpringMVCConfig {...}
- 编写控制器
@RequestMapping("/jsonParam")
@ResponseBody
public String commonParam(@RequestParam User user) {
System.out.println("json数据类型参数传递 user ==> " + user);
return "{'module':'jsonParam'}";
}
-
发送请求
-
请求参数接收失败==》由于现在不是直接传递的参数,而是通过请求的Body进行传递,故@RequestParam不能使用,应该使用@RequestBody
2.JSON对象
- 控制器
@RequestMapping("/jsonObjectParam")
@ResponseBody
public String commonParam(@RequestBody User user) {
System.out.println("json数据类型参数传递 user ==> " + user);
return "{'module':'jsonObjectParam'}";
}
-
发送请求
3.JSON对象数组+对象嵌套
- 控制器
@RequestMapping("/jsonObjectArrayAndContainJsonObjectParam")
@ResponseBody
public String jsonObjectArrayAndContainJsonObjectParam(@RequestBody List<User> userList) {
System.out.println("json对象数组数据+嵌套数组类型参数传递 userList ==> " + userList);
return "{'module':'jsonObjectArrayAndContainJsonObjectParam'}";
}
-
发送请求