喵星之旅-屯粮的松鼠-fastjson2全局配置默认序列化格式

fastjson从1升级到2,默认配置发生变化,坑内草成原有功能异常。

fastjson2全局配置长整型Long、日期Date、字符串String等默认序列化格式。

参考配置

程序启动立即执行如下配置代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JSON.configWriterDateFormat("millis");
JSON.configReaderDateFormat("millis");
JSON.config(JSONWriter.Feature.WriteNullNumberAsZero, // Long等Number类型值为空序列化为0
JSONWriter.Feature.WriteNullBooleanAsFalse, // Boolean类型值为空序列化为false
JSONWriter.Feature.WriteLongAsString, // Long类型序列化为字符串
JSONWriter.Feature.WriteNullListAsEmpty, // List类型值为空序列化为[]
JSONWriter.Feature.WriteBigDecimalAsPlain, // BigDecimal类型序列化为非科学计数法
JSONWriter.Feature.PrettyFormat, // 格式化输出
JSONWriter.Feature.WriteNullStringAsEmpty); // String类型值为空序列化为""
JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames); // 字段名称支持没有双引号的反序列化
JSON.register(String.class, new ObjectWriterPrimitiveImpl<String>(){
@Override
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
jsonWriter.writeRaw((String) object);
}
});

假设是springboot项目,那么可以使用@Configuration注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import com.alibaba.fastjson2.writer.ObjectWriterPrimitiveImpl;
import org.springframework.context.annotation.Configuration;

import java.lang.reflect.Type;

@Configuration
public class Fastjson2Config {
static {
JSON.configWriterDateFormat("millis");
JSON.configReaderDateFormat("millis");
JSON.config(JSONWriter.Feature.WriteNullNumberAsZero, // Long等Number类型值为空序列化为0
JSONWriter.Feature.WriteNullBooleanAsFalse, // Boolean类型值为空序列化为false
JSONWriter.Feature.WriteLongAsString, // Long类型序列化为字符串
JSONWriter.Feature.WriteNullListAsEmpty, // List类型值为空序列化为[]
JSONWriter.Feature.WriteBigDecimalAsPlain, // BigDecimal类型序列化为非科学计数法
JSONWriter.Feature.PrettyFormat, // 格式化输出
JSONWriter.Feature.WriteNullStringAsEmpty); // String类型值为空序列化为""
JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames); // 字段名称支持没有双引号的反序列化
// 当序列化的值为字符串时直接输出字符串,而不是再加一层引号或双引号,如`JSON.toJSONString("bunny")`直接输出"bunny",而不是"\"bunny\""
JSON.register(String.class, new ObjectWriterPrimitiveImpl<String>(){
@Override
public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
jsonWriter.writeRaw((String) object);
}
});
}
}

实际配置

1
2
3
4
5
6
7

@Configuration
public class Fastjson2Config {
static {
JSON.configWriterDateFormat("millis");
}
}

因为原有的就是13位时间戳和yyyy-MM-dd HH:mm:ss都有,只是默认写是一种格式,读取的支持多种格式。如果设置读取,支持变少,就会报错。

文章目录
  1. 参考配置
  2. 实际配置
|