持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
前言
上一篇文章我们介绍了Spring MVC在发送请求时引用数据类型的参数的传递,这篇文章来介绍下我们最常用的json数据类型的参数传递。
为什么用json?
json这种数据格式是我们工作中常用到的,无论是在js中还是在后台程序中,因为它是完全独立与语言的文本格式所以可以兼容不同的语言。
json数据类型参数传递
三种json数据格式
json的数据格式有三种,分别是:
- json数组
- json对象
- json数组对象
准备工作
首先,我们要进行json数据的参数传递,要对json格式的数据进行数据处理我们就需要添加相关的依赖。在pom.xml中添加如下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
添加完之后刷新Maven项目。
然后我们还需要在Spring MVC的配置类中添加@EnableWebMvc注解,@EnableWebMvc注解的功能非常强大,远不止用来处理json数据,后面我们用到再来细讲。这样我们的准备工作就完成了。
json数组参数传递
在syudentController类中写listJson的方法。
@ResponseBody
@RequestMapping("/listJson")
public String listJson(List<String> courses){
System.out.println("listJson获取的json数据:"+courses);
return "{info:listJson data...}";
}
我们在这里用集合去接收json数组参数。还记不记得我们上一篇文章中使用集合类型时遇到的问题?在使用集合类型去接收请求参数时,Spring MVC会将集合类型当成对象来处理,这样就会出现问题,我们的解决方式是在集合前面加上@RequestParam注解。在这里我们加上@RequestParam注解能成功将接收到json数据吗?
说到了这个问题我们就需要先来了解下在Postman中如何传递json参数。
路径传参
之前我们的路径传参是在
Params中传KEY和VALUE。
表单传参
表单传参在
Body中的x-www-form-urlencoded中传参。
json参数传递
json参数的传递同样是在我们的
Body中,不过是在Body中的raw里面,并且数据格式要设置成JSON。
所以上面的问题已经有了答案,我们这里就不用@RequestParam注解,而是使用另一个注解@RequestBody。
在集合前面加上@RequestBody注解:
@ResponseBody
@RequestMapping("/listJson")
public String listJson(@RequestBody List<String> courses){
System.out.println("listJson获取的json数据:"+courses);
return "{info:listJson data...}";
}
前面的工作都完成了我们就来用Postman发送请求传一个json数组。
请求成功了,我们来看下服务器的打印,有没有成功获取到json数组。
打印结果:
listJson获取的json数据:[数学, 语文, 英语]
这样成功出传递并获取了一个json数组。
json对象参数传递
1.创建objectJson方法用于获取json对象的请求参数。
@ResponseBody
@RequestMapping("/objectJson")
public String objectJson(@RequestBody Student student){
System.out.println("objectJson获取的json数据:"+student);
return "{info:objectJson data...}";
}
这里Student对象前面一样也要加上@RequestBody注解
2.使用Postman发送请求传递一个json对象。
3.查看打印结果。
打印结果:
objectJson获取的json数据:Student(name=张三, age=13, school=null)
这里school是null是因为我们没有传值,传值很简单,只需要再嵌套一个json对象。
{"name":"张三","age":13,"school":{"name":"凤凰中学","address":"北京路8号"}}
打印结果:
objectJson获取的json数据:Student(name=张三, age=13, school=School(address=北京路8号, name=凤凰中学))
这样school的值也传递过来了。
json数组对象参数传递
我们有时候会需要传递获取多个对象,这时候就需要传递json的数组对象来实现。
1.创建listObjectJson方法用于获取json数组对象的请求参数。
@ResponseBody
@RequestMapping("/listObjectJson")
public String listObjectJson(@RequestBody List<Student> list){
System.out.println("objectJson获取的json数据:"+list);
return "{info:listObjectJson data...}";
}
2.使用Postman发送请求传递一个json数组对象。
3.请求成功,查看打印结果。
objectJson获取的json数据:[Student(name=张三, age=13, school=School(address=北京路8号, name=凤凰中学)), Student(name=李四, age=12, school=School(address=北京路8号, name=凤凰中学))]
这样我们两个对象就都传过来了。
总结
这里我们又学到一个新的注解@RequestBody,它用于json数据的传递,而我们之前学习的@RequestParam注解用于路径传参或者form表单传参。那么Spring MVC的json数据传递就讲到这里了。喜欢的小伙伴多多支持。