目录
url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
请求参数名与形参变量名不同,使用@RequestParam绑定参数关系
请求参数种类
普通参数
POJO类型参数
嵌套POJO类型参数
数组类型参数
集合类型参数
普通参数:
url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param'}";
}
请求参数名与形参变量名不同,使用@RequestParam绑定参数关系
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return "{'module':'common param different name'}";
}
POJO参数
请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo参数传递 user ==> "+user);
return "{'module':'pojo param'}";
}
嵌套POJO参数
POJO对象中包含POJO对象
public class User {
private String name;
private int age;
private Address address;
}
public class Address {
private String province;
private String city;
}
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
return "{'module':'pojo contain pojo param'}";
}
数组参数
请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
return "{'module':'array param'}";
}
集合保存普通参数
注:如果采用与数组同样的方式往集合里面保存数据,会报错,因为是引用类型,会构造一个集合,然后往把数据当作属性存储进去,但实际我们并不是想要这样做,此时只要@RequestParam 将其当作参数放进去即可。
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
System.out.println("集合参数传递 likes ==> "+ likes);
return "{'module':'list param'}";
}
最后补充两个参数
required:是否为必传参数
defaultValue:参数默认值
但是!!!!最常用的是json数据!!!
使用json先要导依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
postman要发json数据只需要body里选择raw,然后选择json数据即可,post与get都可发送
同时需要开启自动转换json数据的支持(把传过来的json数据转为我们需要的对象)
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
但是此时仍然无法接受数据,加@requestparam也没用,因为数据在请求体里,所以应该加@RequestBody
请求参数(传递json数据)
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println("list common(json)参数传递 list ==> "+likes);
return "{'module':'list common for json param'}";
}
请求参数(传递json对象)
POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
System.out.println("pojo(json)参数传递 user ==> "+user);
return "{'module':'pojo for json param'}";
}
请求参数(传递json数组)
POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数
@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list){
System.out.println("list pojo(json)参数传递 list ==> "+list);
return "{'module':'list pojo for json param'}";
}
@RequestBody与@RequestParam区别
区别
@RequestParam用于接收url地址传参,表单传参content type【application/x-www-form-urlencoded】@RequestBody用于接收json数据content type【application/json】
应用
后期开发中,发送json格式数据为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数
日期类型参数传递
日期类型数据基于系统不同格式也不尽相同
2088-08-18
2088/08/18
08/18/2088
接收形参时,根据不同的日期格式设置不同的接收方式
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")Date date2){
System.out.println("参数传递 date ==> "+date);
System.out.println("参数传递 date(yyyy-MM-dd) ==> "+date1);
System.out.println("参数传递 date(yyyy/MM/dd HH:mm:ss) ==> "+date2);
return "{'module':'data param'}";
}
靠Converter接口实现的类型转换
Converter接口
请求参数年龄数据(String→Integer)
json数据转对象(json → POJO)
日期格式转换(String → Date)
@EnableWebMvc功能之一:根据类型匹配对应的类型转换器
响应
响应页面
@RequestMapping("/toPage")
public String toPage(){
return "page.jsp";
}
响应文本数据
(前面部分传回的json数据实际上还是字符串,开发中是返回一个对象,通过添加@RequestBody去把对象自动转为json数据)
@RequestMapping("/toText")
@ResponseBody
public String toText(){
return "response text";
}
响应json数据(对象转json)
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
User user = new User();
user.setName("赵云");
user.setAge(41);
return user;
}
响应json数据(对象集合转json数组)
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
User user1 = new User();
user1.setName("赵云");
user1.setAge(41);
User user2 = new User();
user2.setName("master 赵云");
user2.setAge(40);
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
return userList;
}
主要就是添加注解@RequestBody
名称:@ResponseBody
类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器返回值为响应体
由HttpMessageConverter实现,专门转换http消息的。(由jackson依赖提供)