概述
官方Github https://github.com/alibaba/fastjson
SerializerFeature
- 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
实体转化为json字符串后出现了$ref字样的东西,这是因为在传输的数据中出现相同的对象时,fastjson默认开启引用检测将相同的对象写成引用的形式
引用是通过"$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自定义配置(有两种方式)
方式一:
@Configuration
public class MyFastJsonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd");
config.setCharset(Charset.forName("UTF-8"));
config.setSerializerFeatures(
//输出map中value为null的数据
SerializerFeature.WriteMapNullValue,
//json格式化
SerializerFeature.PrettyFormat,
//输出空list为[],而不是null
SerializerFeature.WriteNullListAsEmpty,
//输出空string为"",而不是null
SerializerFeature.WriteNullStringAsEmpty
);
converter.setFastJsonConfig(config);
return converter;
}
}
方法2
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd");
config.setCharset(Charset.forName("UTF-8"));
config.setSerializerFeatures(
//输出类名
SerializerFeature.WriteClassName,
//输出map中value为null的数据
SerializerFeature.WriteMapNullValue,
//json格式化
SerializerFeature.PrettyFormat,
//输出空list为[],而不是null
SerializerFeature.WriteNullListAsEmpty,
//输出空string为"",而不是null
SerializerFeature.WriteNullStringAsEmpty
);
converter.setFastJsonConfig(config);
converters.add(converter);
}
}
Fastjson转换JSON数据,丢失is问题
解决:在获取布尔值方法前面加上get
public boolean getIsToday() {
return isToday;
}