开发者学堂课程【SpringBoot 实战教程: 使用 FastJson 解析 Json 数据】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10790
使用 FastJson 解析 Json 数据
内容介绍:
一、启动类继承 WebMvcConfigurerAdapter
二、把消息转换器注入到容器
一、启动类继承 WebMvcConfigurerAdapter
1、通过上一讲学习知道了 springboot 默认消息转换器,对于阶层的处理,springboot 也进行了配置。SpringBoot 默认配置的是 Jackson。
2、在 autoconfigure 里面找和 web 相关的 web 依赖。有 HttpMessageConvertersAutoConfiguration.class
自动配置,用的就是 Jackson。
3、如果不想用 Jackson,想用别的进行阶层转换,比如 fastjson。
4、使用 FastJson 解析 JsonS 数据,使用 fastjson 的依赖的 jar 包,把它放进工程中。使用1.2.15版本。
<!-- fastjson 的依赖 -->
<dependency>
<groupId>com. alibaba</groupId>
<artifactId> fastjson</ artifactId>
<version>1.2.15</version>
</dependency>
5、jar 包依赖好后,在 springboot 中使用 fastjson 的配置方式有两种,第一种是让启动类继承一个东西,第二种是 bean 注入的方式。
6、首先看第一种方式,让启动类继承 WebMvcConfigurerAdapter,重写 configureMessageConverters 方法。需要把 fastjson 消息转换器注入到 spring 容器中,
Void
configureMessageConverters (List<HttpMessageConverter<?>>
converters)
{
//创建 fastjson 的消息转换器
FastJsonHttpMessageConverter convert = new
FastJsonHttpMessageConverter() ;
//创建 fastjson 的配置对象
FastJsonConfig
config = new FastJsonConfig() ;
//对 json 数据进行格式化
config.setSerializerFeatures(SerializerFeature.PrettyFoumat) ;
通常希望返回的阶层数据是可以被格式化的,对应一个常量,用来做相关配置
convert. setFastJsonConfig (config) ;
把 config 对象给 Convert 转化器,这个转换器要加入都容器中,重写有一个参数HttpMessageConverter,集合类型,把它加入到集合中即可。
converters. add (convert);
}
这就是第一种配置 fastjson 的方式。
(1)验证 springboot 会不会使用配置的 fastjson,首先创建一个实体类,命名为 person。
(2)定义一些属性,生成 set,get 方法。写一个 controller,让它返回 person 对象,把 person 对象转成阶层模式。
Private Int id;
Private String name ;
Private Date date ;
public int getId() {
Return id;
}
public void setId(int id) {
this. id = id;
}
public String getName () {
Return name ;
(3)单独创建一个放实体类的包。移动。
(4)创建 controller,命名为 testcontroller。
(5)写一个功能,返回的是 person 对象,创建一个 person 对象,导入 setid,setname,setdate 日期。
@RequestMapping ( "/person")
@ResponseBody
Person ren =new Person() ;
ren. setId(66) ;
ren. setName ("
赵六
") ;
ren. setDate (new Date() ) ;
Return ren ;
(6)另外需要扫描 controller 所在的包,在启动类中加入:
@SpringBootApplication (scanBasePackages=" com. qianfeng. controller")
(7)测试,启动,访问路径是 person。可以到看出现了乱码的问题。日期没有指定格式,它是毫秒数,springboot 默认用的是 utl-8,为什么会出现乱码呢?
(8)现在属于 springboot 对客户端的响应,响应用的肯定不是 utf -8,响应的配置默认没有开启 ,把 springboot 的 response 编码设置为 utf -8这个功能开启,开启的方式是在全局配置文件中加入以下代码:
spring .http. encoding. force=true
(9)在 resources 下创建全局配置文件。
(10)加入spring .http. encoding. force=true
,这时 springboot 对客户端进行响应使用的就是 utf -8。
(11)重新启动,访问。乱码问题就解决了。
(12)如何验证是 fastjson 呢?有可能是 jackson?在 person 上使用 fastjson 注解,对日期进行格式化,指定规定的格式,年月日。@JSONField ( format=
“
yyyy-MM-dd" )
(13)重新启动,再重新访问刷新。可以看到规定的日期格式。说明解析用的就是 fastjson。
让启动类继承 WebMvcConfigurerAdapter,这种方式是第一种方式。
二、把消息转换器注入到容器
1、用@bean 注解,写一个方法,这个方法返回的必须是消息转换器对象,通过第一种方法,消息转换器是 HttpMessageConverter 类型。实际上用的是 fastjson 转换器,最终把返回的对象注入到容器中。
@Bean
public HttpMessageConvertersfastJsonMssageConverter ()
//创建 fastjson 的消息转换器
FastJsonHttpMessageConverter convert = new
FastJsonHttpMessageConverter() ;
//创建 fastjson 的配置对象
FastJsonConfig
config = new FastJsonConfig() ;
//对 json 数据进行格式化
config.setSerializerFeatures(SerializerFeature.PrettyFoumat) ;convert. setFastJsonConfig (config) ;
HttpMessageConverter
<?>con=convert;
Return new
HttpMessageConverter(con) ;
这是配置 FastJson 的第二种方式。
2、启动,看能否正常使用,访问,跟第一种方法的结果是一样的。
3、可以把格式改成时分秒,再启动,访问,这时变成年月日时分秒。
4、这就是在 springboot 中配置 FastJson 进行 jackson 转换的方式。