程序新视界:一个“软实力”、“硬技术”同步成长的平台。
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[转发朋友圈],这是写作最大的动力。
原创热门推荐
程序新视界
一个“软实力”,“硬技术”同步成长的公众号
领取专属 10元无门槛券
私享最新 技术干货