SpringBoot2.x中Json基础使用详解

程序新视界:一个“软实力”、“硬技术”同步成长的平台。

JSON是一种轻量级的数据交换格式,易于阅读、编写、机器解析和生成。JSON采用完全独立于编程语言的文本格式,是一种理想的数据交换语言。

在Spring Boot中,对JSON进行了简单而又完善的支持,基本上是开箱即用。本篇文章通过Spring Web中对Json的使用来进行讲解。

Spring Boot对Json的支持

默认情况下Spring Boot支持三种Json类库:Gson、Jackson和JSON-B。其中Jackson是Spring Boot官方推荐的默认版本。同时,基于Spring Boot的自动配置策略,针对以上支持的Json类库,当类路径下存在对应的类库时,Spring Boot便会对其进行自动配置。

Spring Boot针对Jackson专门提供了一个start:spring-boot-starter-json。理论上,只要引入了该start,当Spring Boot项目启动时便会进行相应的自动配置。

这里我们以Web项目为例进行讲解,当在项目中引入了spring-boot-starter-web,默认情况下即引入了spring-boot-starter-json。因为,在spring-boot-starter-web中已经引入了spring-boot-starter-json。

对应引入代码如下,当然我们也可以自行引入:

Spring Boot Web中使用Json

通过上面的方式引入了Jackson,在web请求中便可以进行使用了,而具体使用Spring Boot已经帮我们进行处理了。下面看一下使用的实例。

首先创建实体类User:

然后创建对应的web请求处理类,当请求/userInfo时创建并返回User对象。

在此使用了@RestController注解,该注解会采用适当的HttpMessageConverter将数据格式转为之后写入到HTTP Response对象的 body数据区。常用于异步请求,针对APP提供API等常见。

通常情况下,直接使用@Controller和@RequestMapping组合时,返回值通常解析为跳转路径,而当使用@RestController和@RequestMapping组合时,则是直接写入HTTP响应正文中,不再会进行路径解析跳转。

@RestController是Spring4以后提供的注解,它组合了@Controller和@RequestBody注解。本质上来说,是@RequestBody注解将对象转换为Json字符串。

在Spring4以前,可采用如下两种形式编写:

或者如下方式:

后面使用的过程中,我们统一采用Spring4以后的@RestController。

对应实例的单元测试类代码如下:

执行单元测试,打印的结果如下:

还以上面的场景为例,上面间接使用了@RequestBody注解来完成返回参数的Json转换,下面看看如果请求过来的参数本身是Json字符串。

我们知道,在Spring MVC中,当我们请求参数以key=value形式传递时,Spring会自动进行参数的匹配赋值。那么,此时如果传递进来的是Json字符串,而该字符串又是通过HTTP Request请求中的body传递的数据。该如何处理?

这涉及到另外一个注解@RequestBody,该注解用于读取HTTP Request请求中的body数据,然后使用默认的HttpMessageConverter对数据(这里以Json为例)进行解析、封装并返回。最后把HttpMessageConverter返回的对象与Controller中使用该注解的方法参数进行绑定。

而HTTP Request请求中body的数据格式(是json还是xml等),由header部分的Content-Type来设置。

下面通过具体实例来看如何使用@RequestBody及如何通过MockMvc进行模拟请求。

对应的单元测试代码如下:

@RequestBody的具体使用很简单,在Json要转换的目标对象参数前使用该注解即可。重点关注一下单元测试中MockMvc如何模拟并传递Json参数。

MockMvcRequestBuilders构建Request请求时,通过content方法来设置body中要传递的Json字符串,通过contentType方法来指定上面提到的数据格式Content-Type的设置。

执行上述单元测试代码,打印结果如下:

至此,关于Spring Boot默认集成的Json框架在Web请求中的使用已经讲解完毕。后续,针对其他功能我们继续展开讲解。

本文源代码地址:

https://github.com/secbr/springboot-all/tree/master/springboot-json

感谢阅读,原创不易,喜欢就点个[在看]or[转发朋友圈],这是写作最大的动力。

原创热门推荐

程序新视界

一个“软实力”,“硬技术”同步成长的公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200101A05LEW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券