29 May 2022

记录升级fastjson从1.x升级到2.x后的相关问题和内容

fastjson2是大版本升级,和1.x有些内容不兼容,所以,升级需谨慎。 我在系统中升级的目标有两个:

  • 能使用jackson替换掉fastjson尽量替换掉
  • 如果不能替换,只用fastjson2做一个json工具包,不将其与spring boot做深度整合

我是用的fastjson版本为2.0.4

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.4</version>
</dependency>
  • 升级后原来很多api从com.alibaba.fastjson包调整到com.alibaba.fastjson2下
  • 使用jackson替换fastjson作为系统默认的json解析器
    • 删除掉原有的FastjsonConfig配置
    • 配置文件中增加jackson配置:
        spring.jackson.date-format=YYYY-MM-dd HH:mm:ss
        spring.jackson.locale=zh
        spring.jackson.time-zone=GMT+8
      
    • java entity中增加注解:
          /**
           * jackson在对hibernate的持久化实体类的代理对象进行序列化时,代理类中的"hibernateLazyInitializer"属性为空,触发了系列化规划SerializationFeature.FAIL_ON_EMPTY_BEANS,即“出现空Bean时触发序列化失败”!
           **/
          @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
          或者在spring boot启动类增加
           @Bean
          public ObjectMapper objectMapper() {
              return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
          }
    
    




blog comments powered by Disqus
Fork me on GitHub