点击登录,精彩内容等着你

Fastjson2让springboot的json序列化飞起来

全栈侠客

2022-10-10
作为紧跟潮流的精益编程,怎么也要用上史上最快的json框架Fastjson2,性能卓越就不说了,最重要是符合国人的思维逻辑与使用习惯。

本人以往的项目,一律是使用fastjson的1系列版本,虽然经历过几次的重大bug的事件,但是即使升级,也没有什么!
毕竟就算是官方的Jackson的也爆出过bug事件呢!
程序嘛,没有一些bug什么的,真的不完美…神器都是经过不断迭代更新与不断优化的

本章内容


相信网络上,关于springboot设置fastjson做序列化与反序列化的文章,多如牛毛,本周将对一些通用的使用方法忽略带过,对于一些高级应用方式将详细阐述…


  1. springboot接入fastjson2的配置
  2. 重写或者扩展或者覆盖springboot中关于json的转换器
  3. 扩展fastjson2相关类方法,充分发挥其强大能量
  4. fastjson2作为数据传播介质,减少DTO或者DO等中间封装类,灵活组装数据,简化系统代码量

一、springboot接入fastjson2的配置

思路:

  1. 排除掉springboot默认使用的Jackson;
  2. 加入Fastjson2的依赖

1.排除默认的Jackson

  1. <!-- spring boot web-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <exclusions>
  6. <!-- 去掉Jackson依赖,用fastjson -->
  7. <exclusion>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-json</artifactId>
  10. </exclusion>
  11. </exclusions>
  12. </dependency>

2.加入Fastjson2的依赖

截止于今天2022-10-10,Fastjson2最新版本为2.0.15

  1. <properties>
  2. <fastjson.version>2.0.15</fastjson.version>
  3. </properties>
  4. <dependency>
  5. <groupId>com.alibaba.fastjson2</groupId>
  6. <artifactId>fastjson2-extension</artifactId>
  7. <version>${fastjson.version}</version>
  8. </dependency>

二、重写或者扩展或者覆盖springboot中关于json的转换器

关键字:Fastjson2,springboot序列化与反序列化,HttpMessageConverter
关联类:JSONWebMvcConfigurer.java

  • springboot对json的转换,包括序列化与反序列化,都是通过一定的转换器来指定转换规则,无论是默认的Jackson还是Fastjson2,都一样。
  • 只要修改或者覆盖默认的转换器,就能达到json的转换的自定义

1.Fastjson2的官方对于springboot的支持

  1. @Bean
  2. public FastJsonConfig fastJsonConfig() {
  3. //1.自定义配置...
  4. FastJsonConfig config = new FastJsonConfig();
  5. config.setDateFormat("yyyy-MM-dd HH:mm:ss");
  6. //2.1配置序列化的行为
  7. //JSONWriter.Feature.PrettyFormat:格式化输出
  8. config.setWriterFeatures(JSONWriter.Feature.PrettyFormat);
  9. //2.2配置反序列化的行为
  10. config.setReaderFeatures(JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean);
  11. return config;
  12. }
  13. /**
  14. * 使用 FastJsonHttpMessageConverter 来替换 Spring MVC 默认的 HttpMessageConverter
  15. * 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化和反序列化速度。
  16. * */
  17. @Override
  18. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  19. //1.转换器
  20. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  21. converter.setDefaultCharset(StandardCharsets.UTF_8);
  22. converter.setFastJsonConfig(fastJsonConfig());
  23. converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
  24. converters.add(0, converter);
  25. }
  26. ....//详情请查看com.alibaba.fastjson2.JSONWebMvcConfigurer.java

文档地址:Fastjson2增强扩展

关于Fastjson2与Fastjson1的区别,请参考:
Fastjson1与Fastjson2的差别,深入简化的分析

阅读 13072     最后编辑 2023-08-24 11:04
文章补充
评论(0) 发表新评论
  • ...暂无评论...

我是有底线的 评论与点赞5分钟更新一次
回复评论
取消关闭

请先登录