Spring MVC json数据参数传递

600 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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参数。

路径传参

微信截图_20221017200749.png 之前我们的路径传参是在Params中传KEY和VALUE。

表单传参

微信截图_20221017201029.png 表单传参在Body中的x-www-form-urlencoded中传参。

json参数传递

微信截图_20221017201428.png 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数组。

微信截图_20221017202948.png 请求成功了,我们来看下服务器的打印,有没有成功获取到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对象。

微信截图_20221017204503.png

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数组对象。

微信截图_20221017205440.png

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数据传递就讲到这里了。喜欢的小伙伴多多支持。