现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是JSON,所以前端如果发送的是JSON数据,后端该如何接收?
对于JSON数据类型,我们常见的有三种:
对于上述数据,前端如何发送,后端如何接收?
SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.8version>
dependency>
在SpringMVC的配置类中开启SpringMVC的注解支持,这里面就包含了将JSON转换成对象的功能。
@Configuration
@ComponentScan("com.dcxuexi.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}
//使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listjJsonParam")
@ResponseBody
public String listParamForJson(@RequestBody List<String> citys){
System.out.println("Json List参数传递 citys ==> " + citys);
return citys.toString();
}
JSON普通数组的数据就已经传递完成,下面针对JSON对象数据和JSON对象数组的数据该如何传递呢?
我们会发现,只需要关注请求和数据如何发送?后端数据如何接收?
请求和数据的发送:
{
"userName": "xiaochuang",
"userAge": 20,
"userSex": "man"
}
后端接收数据:
@RequestMapping("/jsonParam")
@ResponseBody
public String userParamForJson(@RequestBody User user){
System.out.println("Json参数传递 user ==> " + user);
return user.toString();
}
启动程序访问测试
说明:
city为null的原因是前端没有传递数据给后端。
如果想要city也有数据,我们需求修改前端传递的数据内容:
{
"userName": "xiaochuang",
"userAge": 20,
"userSex": "man",
"city": {
"country": "China",
"provice": "ShangHai",
"area": "PuDong"
}
}
再次发送请求,就能看到city中的数据
集合中保存多个POJO该如何实现?
请求和数据的发送:
[
{
"userName": "xiaochuang",
"userAge": 20,
"userSex": "man",
"city": {
"country": "China",
"provice": "ShangHai",
"area": "PuDong"
}
},
{
"userName": "zhangsan",
"userAge": 18,
"userSex": "man",
"city": {
"country": "China",
"provice": "BeiJing",
"area": "HaiDian"
}
},
{
"userName": "lily",
"userAge": 22,
"userSex": "woman",
"city": {
"country": "China",
"provice": "AnHui",
"area": "HeFei"
}
}
]
后端接收数据:
@RequestMapping("/userListParam")
@ResponseBody
public String userListParamForJson(@RequestBody List<User> userList){
System.out.println("Json参数传递 userList ==> " + userList);
return userList.toString();
}
启动程序访问测试
小结
SpringMVC接收JSON数据的实现步骤为:
(1)导入jackson包
(2)使用PostMan发送JSON数据
(3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解
(4)Controller方法的参数前添加@RequestBody注解
名称 | @EnableWebMvc |
---|---|
类型 | 配置类注解 |
位置 | SpringMVC配置类定义上方 |
作用 | 开启SpringMVC多项辅助功能 |
名称 | @RequestBody |
---|---|
类型 | 形参注解 |
位置 | SpringMVC控制器方法形参定义前面 |
作用 | 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次 |
区别
应用
gitee 代码下载
github 代码下载