1、Json数据传输参数
之前我们知道,现在比较流行的开发方式是异步调用,前后台以异步方式进行交换,传输的数据使用的就是JSON,所以前端如果发送的是JSON数据,后端怎么接收捏?、
对于JSON数据类型,我们常见的有三种方式:
1、json普通数组(["value1","value2","value3",.....])
2、json对象({key1 : value1 , key2 : value2 , .......})
3、json对象数组([{key1:value1,value2,....} , {key2:value1,value2,....} , .......])
我们需要用我们要用jackson来处理json的转化,所以现在pom.xml中添加jackson的依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
然后要开启SpringMVC 注解支持
@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}
1.1、Json普通数组
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(@RequestBody List<String> ans){
System.out.println("传递参数===>"+ans);
return "{'stukk':'user'}";
}
}
1.2、Json对象数据
然后在参数前面添加@RequestBody
@Controller
@RequestMapping("/ball")
public class BallController {
@RequestMapping("/save")
@ResponseBody
public String save(@RequestBody Ball ball){
System.out.println("ball ===> "+ball);
return "{'stukk':'ball'}";
}
}
1.3、Json对象数组
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(@RequestBody List<Ball> ans){
System.out.println("传递参数===>"+ans);
return "{'stukk':'user'}";
}
}
小结
SpringMVC接收JSON数据的实现步骤为:
(1)导入jackson包
(2)使用PostMan发送JSON数据
(3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解
(4)Controller方法的参数前添加@RequestBody注解
知识点1:@EnableWebMvc
名称 | @EnableWebMvc |
---|---|
类型 | ==配置类注解== |
位置 | SpringMVC配置类定义上方 |
作用 | 开启SpringMVC多项辅助功能 |
知识点2:@RequestBody
名称 | @RequestBody |
---|---|
类型 | ==形参注解== |
位置 | SpringMVC控制器方法形参定义前面 |
作用 | 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次 |
@RequestBody与@RequestParam区别
-
区别
-
@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
-
@RequestBody用于接收json数据【application/json】
-
-
应用
-
后期开发中,发送json格式数据为主,@RequestBody应用较广
-
如果发送非json格式数据,选用@RequestParam接收请求参数
-
关于日期的传递:有多种形式,主要yyyy-mm-dd、yyyy/mm/dd、dd/mm/yyyy .......
2、响应
SpringMVC接收到请求和数据后,进行一些了的处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户。
比如:根据用户ID查询用户信息、查询用户列表、新增用户等。
对于响应,主要就包含两部分内容:
-
响应页面
-
响应数据
-
文本数据
-
json数据
-
因为异步调用是目前常用的主流方式,所以我们需要更关注的就是如何返回JSON数据,对于其他只需要认识了解即可。
2.1、响应页面
设置返回页面
写一个简单的JSP试一试
@Controller
public class UserController {
@RequestMapping("/user")
public String save(){
System.out.println("相应页面");
return "Hello.jsp";
}
}
把@RequestBody去掉,不然还是返回文本数据形式
页面就出来了。
2.2、响应文本数据
@Controller
public class UserController {
@RequestMapping("/user")
@ResponseBody
public String save(){
System.out.println("相应文本数据");
return "Hello.jsp";
}
}
(同样的代码,加上@ResponseBody)
出来就不是页面了,而是一条字符串。
2.3、相应JSON对象
@Controller
public class UserController {
@RequestMapping("/user")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json对象数据");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
}
知识点1:@ResponseBody
名称 | @ResponseBody |
---|---|
类型 | ==方法\类注解== |
位置 | SpringMVC控制器方法定义上方和控制类上 |
作用 | 设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能 |
相关属性 | pattern:指定日期时间格式字符串 |
说明:
-
该注解可以写在类上或者方法上
-
写在类上就是该类下的所有方法都有@ReponseBody功能
-
当方法上有@ReponseBody注解后
-
方法的返回值为字符串,会将其作为文本内容直接响应给前端
-
方法的返回值为对象,会将对象转换成JSON响应给前端
-
此处又使用到了类型转换,内部还是通过Converter接口的实现类完成的,所以Converter除了前面所说的功能外,它还可以实现:
-
对象转Json数据(POJO -> json)
-
集合转Json数据(Collection -> json)