概述

官方Github https://github.com/alibaba/fastjson

SerializerFeature

  1. Fastjson的SerializerFeature序列化属性
    3. QuoteFieldNames———-输出key时是否使用双引号,默认为true
    4. WriteMapNullValue——–是否输出值为null的字段,默认为false
    5. WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
    6. WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
    7. WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
    8. WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
名称 含义
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteEnumUsingToString Enum输出name()或者original,默认为false
SortField 按字段名称排序后输出。默认为false
WriteTabAsSpecial 把\t做转义输出,默认为false
PrettyForma 结果是否格式化,默认为false
WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到

[

](https://blog.csdn.net/zyt_1272999061/article/details/107934700)

问题分析:$ref

  1. 实体转化为json字符串后出现了$ref字样的东西,这是因为在传输的数据中出现相同的对象时,fastjson默认开启引用检测将相同的对象写成引用的形式
  2. 引用是通过"$ref"来表示的<br /> 引用 描述<br /> "$ref":".." 上一级<br /> "$ref":"@" 当前对象,也就是自引用<br /> "$ref":"$" 根对象<br /> "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)<br /> 说到引用分为两种,重复引用和循环引用

重复引用

springboot

释:springboot默认使用Jackson-databind作为JSON处理器,使用fastjson就需要先剔除jackson-databind


2.fastjson自定义配置(有两种方式)
方式一:

  1. @Configuration
  2. public class MyFastJsonConfig {
  3. @Bean
  4. FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
  5. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  6. FastJsonConfig config = new FastJsonConfig();
  7. config.setDateFormat("yyyy-MM-dd");
  8. config.setCharset(Charset.forName("UTF-8"));
  9. config.setSerializerFeatures(
  10. //输出map中value为null的数据
  11. SerializerFeature.WriteMapNullValue,
  12. //json格式化
  13. SerializerFeature.PrettyFormat,
  14. //输出空list为[],而不是null
  15. SerializerFeature.WriteNullListAsEmpty,
  16. //输出空string为"",而不是null
  17. SerializerFeature.WriteNullStringAsEmpty
  18. );
  19. converter.setFastJsonConfig(config);
  20. return converter;
  21. }
  22. }

方法2

  1. @Configuration
  2. public class MyWebMvcConfig implements WebMvcConfigurer {
  3. @Override
  4. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  5. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  6. FastJsonConfig config = new FastJsonConfig();
  7. config.setDateFormat("yyyy-MM-dd");
  8. config.setCharset(Charset.forName("UTF-8"));
  9. config.setSerializerFeatures(
  10. //输出类名
  11. SerializerFeature.WriteClassName,
  12. //输出map中value为null的数据
  13. SerializerFeature.WriteMapNullValue,
  14. //json格式化
  15. SerializerFeature.PrettyFormat,
  16. //输出空list为[],而不是null
  17. SerializerFeature.WriteNullListAsEmpty,
  18. //输出空string为"",而不是null
  19. SerializerFeature.WriteNullStringAsEmpty
  20. );
  21. converter.setFastJsonConfig(config);
  22. converters.add(converter);
  23. }
  24. }

Fastjson转换JSON数据,丢失is问题

解决:在获取布尔值方法前面加上get

  1. public boolean getIsToday() {
  2. return isToday;
  3. }