SpringMVC-JSON数据传输参数

JSON数据传输参数


现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是==JSON==,所以前端如果发送的是JSON数据,后端该如何接收?

对于JSON数据类型,我们常见的有三种:

  • json普通数组([“value1”,”value2”,”value3”,…])
  • json对象({key1:value1,key2:value2,…})
  • json对象数组([{key1:value1,…},{key2:value2,…}])

对于上述数据,前端如何发送,后端如何接收?

1. JSON普通数组


步骤1:pom.xml添加依赖

SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖

1
2
3
4
5
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>

除了jackson还可以用gson等。

步骤2:PostMan发送JSON数据

1630485135061

步骤3:开启SpringMVC注解支持

在SpringMVC的配置类中开启SpringMVC的注解支持,这里面就包含了将JSON转换成对象的功能。

  • @EnableWebMvc :开启json数据类型自动转换。
1
2
3
4
5
6
@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

步骤4:参数前添加@RequestBody

1
2
3
4
5
6
7
//使用@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'}";
}

2. JSON对象数据


请求和数据的发送:

1
2
3
4
{
"name":"itcast",
"age":15
}
1630493105450

后端接收数据:

1
2
3
4
5
6
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
System.out.println("pojo(json)参数传递 user ==> "+user);
return "{'module':'pojo for json param'}";
}

启动程序访问测试

1630493233550

说明:

address为null的原因是前端没有传递数据给后端。

如果想要address也有数据,我们需求修改前端传递的数据内容:

1
2
3
4
5
6
7
8
{
"name":"itcast",
"age":15,
"address":{
"province":"beijing",
"city":"beijing"
}
}

再次发送请求,就能看到address中的数据

1630493450694


3. JSON对象数组


集合中保存多个POJO该如何实现?

请求和数据的发送:

1
2
3
4
[
{"name":"itcast","age":15},
{"name":"itheima","age":12}
]
1630493501205

后端接收数据:

1
2
3
4
5
6
@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'}";
}

启动程序访问测试

1630493561137


4. 总结


知识点1:@EnableWebMvc

名称 @EnableWebMvc
类型 ==配置类注解==
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能

[!Tip]

提供将JSON转换成对象的功能

知识点2:@RequestBody

名称 @RequestBody
类型 ==形参注解==
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

@RequestBody与@RequestParam区别

  • 区别

    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
    • @RequestBody用于接收json数据【application/json】
  • 应用

    • 只用涉及JSON请求格式数据才用@RequestBody
    • 如果发送非json格式数据,选用@RequestParam接收请求参数